这是我的代码中发生这种情况的一部分...无论我在printf的帮助下打印它的输出重复3次,并且该值是路径变量
char *path;
char buf[1024];
struct group grp;
struct group *grpt;
path=strdup(pointer);
while((sd=readdir(dp))!=NULL)
{ if(sd->d_name[0]=='.')
continue;
strcat(path,"/");
strcat(path,sd->d_name);
stat(path, &my_stat);
printf("%s \t ",sd->d_name);
printf("\n");
int x= (int) (strlen(path) - strlen(sd->d_name));
path[x-1]='\0';
path;
}
答案 0 :(得分:1)
path=strdup(pointer);
...
strcat(path,"/");
这将导致未定义的行为。当调用strdup
时,它将返回一个指向大块内存的指针,该内存块足以容纳字符串的副本。它可能更大,但不能保证。当您调用strcat
时,您正在写入未分配的内存。
解决这个问题的一种方法是手动指定“大到足以满足所有目的”值的大路径。像这样:
char path[1000];
strcpy(path, pointer);
如果您想要更精细(不一定更好)的解决方案,可以使用realloc
来更改已分配内存的大小。