printf更改char *

时间:2017-10-23 15:55:16

标签: c string printf

这是我的代码中发生这种情况的一部分...无论我在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;
    }

1 个答案:

答案 0 :(得分:1)

path=strdup(pointer);
...
strcat(path,"/");

这将导致未定义的行为。当调用strdup时,它将返回一个指向大块内存的指针,该内存块足以容纳字符串的副本。它可能更大,但不能保证。当您调用strcat时,您正在写入未分配的内存。

解决这个问题的一种方法是手动指定“大到足以满足所有目的”值的大路径。像这样:

char path[1000];
strcpy(path, pointer);

如果您想要更精细(不一定更好)的解决方案,可以使用realloc来更改已分配内存的大小。