繁体   English   中英

C编程-使用strcat()导致valgrind错误

[英]C Programming - Use of strcat() causing errors in valgrind

我有一个函数读取一个文件(从stdin),读取前3行并将它们连接起来。

char line[LINESIZE];
char *temp_fd = malloc(sizeof(char)*LINESIZE*3);
char *temp_sm = malloc(sizeof(char)*LINESIZE);
char *temp_nm = malloc(sizeof(char)*LINESIZE);

char temp_pc[LINESIZE];

for(i=0;i<3;i++) {
    if (fgets(line, LINESIZE, file) != NULL) {
        strcat(temp_fd,line);

        if (i==0)
            strcpy(temp_sn, line);
        else if(i==1)
            strcpy(temp_nm, line);
        else if(i==2)
            strcpy(temp_pc,line);
    }
}

我在valgrind中遇到两个错误,据我了解,strcat是问题所在。 如何为我的指针正确分配内存? (LINESIZE为60 btw)

谢谢!

在使用缓冲区之前,您无需做任何事情来清除缓冲区空间。

您可以使用两种不同的方法来修复它。 任何一种都可以工作:

  • 在使用缓冲区终止符之前,将空终止符字节写入缓冲区的头部(例如strcpy(temp_fd, "");

  • calloc而不是malloc分配

由于temp_fd未初始化,因此在您第一次执行循环时,应使用strcpy而不是strcat 这将复制字符串,而不是尝试附加它。

这样做的原因是strcat在复制内容之前会搜索要附加数据的位置。 但是,在调用strcat时, temp_fd的内容未初始化,从而导致了问题。

或者,您可以在分配之后temp_fd'\\0'放在temp_fd的初始位置,然后在循环的所有迭代中调用strcat

char *temp_fd = malloc(sizeof(char)*LINESIZE*3);
temp_fd[0] = '\0';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM