簡體   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