C 文件处理将随机字符附加到文件中

C File Handling Appending Random Characters into File

以下代码块创建一个字符串

void generateDot(struct node **head, char *str){
    if(*head == NULL){
        return;
    }
    else{
        struct node *itr = *head;

        generateDot(&(itr->left), str);
        if(itr->parent){
            char buff[3];
            snprintf(buff, 3, "%d", itr->parent->data);
            strcat(str, buff);
            strcat(str, "--");
            snprintf(buff, 3, "%d", itr->data);
            strcat(str, buff);
            strcat(str, "\n");
        }
        generateDot(&(itr->right), str);
    }
}

以下代码块将字符串写入文件:

 char str[] = "";
 generateDot(&head, str);
 printf("%s", str);

 FILE *fhand = fopen("1.dot", "w");
 fputs(str, fhand);

 fclose(fhand);

当我打印 str 时,它按预期打印。但是,即使将相同的 str 打印到文件中,文件的第二行也会显示意外字符,而不管 str 是什么。

例如,当str为:

3--1
7--3
3--4
19--10
7--19
19--20

文件包含:

3--1
`F
w
3--4
19--10
7--19
19--20

非常感谢任何帮助。

当您 strcat(str, buff) 写入相邻的未分配内存时。这会调用未定义的行为,任何事情都可能发生。

当您打印 str 时,内存恰好与您所写的一样。但是 fopenfputs 中的某些东西分配了更多的内存,用垃圾覆盖了 str 的未分配部分。

您需要为 str 分配足够的内存。由于您不知道需要多少内存,因此最好在 generateDot 和 return 字符串中进行分配和重新分配。