c linux stat参数指向未初始化的字节?
我有一个循环检查文件的修改时间,以便对其执行I/o。 我正在使用stat命令。Valgrind抛出未初始化字节的错误消息。。到底怎么了?在将文件作为参数传递给它之前,我已经确保文件名列表不是空的,并且文件存在,但是错误仍然存在c linux stat参数指向未初始化的字节?,c,linux,error-handling,valgrind,stat,C,Linux,Error Handling,Valgrind,Stat,我有一个循环检查文件的修改时间,以便对其执行I/o。 我正在使用stat命令。Valgrind抛出未初始化字节的错误消息。。到底怎么了?在将文件作为参数传递给它之前,我已经确保文件名列表不是空的,并且文件存在,但是错误仍然存在 for (i = 0; i < fcount; i++) { if (modTimeList[i] == 0) { int statret = 0; if(fileNameList[i]!=NULL) stat
for (i = 0; i < fcount; i++) {
if (modTimeList[i] == 0) {
int statret = 0;
if(fileNameList[i]!=NULL)
statret = stat(fileNameList[i], &file_stat); // error
if (statret == -1) {
printf(" stat error at %d", i);
} else {
modTimeList[i] = file_stat.st_mtime;
// process
}
} else {
int statret2 = 0;
if(fileNameList[i]!=NULL)
statret2 = stat(fileNameList[i], &file_stat); // error
if (statret2 == -1) {
printf(" stat error at %d", i);
} else {
if (modTimeList[i] < file_stat.st_mtime) {
// process
}
}
}
}
减退
char fileNameList[100][256];
我正在像这样初始化文件名
sprintf(inputPath, "find -name %s*.ext", filename);
fpop = popen(inputPath, "r");
while (fgets(inputPath, sizeof(inputPath) - 1, fpop) != NULL) {
strcpy(fileNameList[fcount], trimwhitespace(inputPath));
fcount++;
}
pclose(fpop);
如果您没有首先初始化
文件名
数组,其内容将不是零,而是其他内容(很多时候它是0xCC,但在不同的系统/arch/等上可能有所不同)。如果您没有首先初始化文件名
数组,其内容将不是零,而是其他内容(很多时候它是0xCC,但在不同的系统/arch/等上可能会有所不同。)因为文件名列表
声明为:
char fileNameList[100][256];
if(fileNameList[i]!=NULL)
将始终为true,因为fileNameList[i]
不是空指针。您应该将检查更改为:
if ('\0' != *fileNameList[i]) /* Check if empty string. */
但是,为了使其工作,您需要初始化fileNameList
:
char fileNameList[100][256] = { { 0 } };
As
文件名列表
声明为:
char fileNameList[100][256];
if(fileNameList[i]!=NULL)
将始终为true,因为fileNameList[i]
不是空指针。您应该将检查更改为:
if ('\0' != *fileNameList[i]) /* Check if empty string. */
但是,为了使其工作,您需要初始化fileNameList
:
char fileNameList[100][256] = { { 0 } };
仅仅因为
fileNameList[i]
处的条目不为空并不意味着它已初始化。例如,char*fileNameList[10];
将包含(随机)非空指针,因为它们尚未初始化。您可以演示如何声明和填充fileNameList
吗?如果我在fileNameList循环的开始处执行printf,则值将签出。您可以发布更多代码吗?声明和填充fileNameList
并分配fcount
,仅仅因为fileNameList[i]
处的ry不为NULL并不意味着它已初始化。例如,char*fileNameList[10];
将包含(随机)非空指针,因为它们尚未初始化。您能演示如何声明和填充fileNameList
吗?如果我在fileNameList循环的开始处进行printf,值将被签出。您能发布更多代码吗?fileNameList
的声明和填充以及fcount
的赋值?我不明白。首先填充文件名数组,然后将文件名传递给stat命令。您是说我必须在使用名称初始化之前将其初始化为零吗?错误在运行时发生否,如果您已经填充了,则可以。可能有一些单元格您没有指定值?我不明白。文件名是首先填充ray,然后将文件名传递给stat命令。你是说我必须在使用名称初始化之前将其初始化为零吗?错误在运行时发生否,如果你已经填充了,则没有问题。可能有一些单元格没有指定值?感谢hmjd,这非常有帮助。感谢hmjd,w这很有帮助。