簡體   English   中英

在數組segfault中存儲char

[英]Storing a char in an array segfault

我的代碼中出現了段錯誤,我不確定原因。 我讀了一個文件並計算了行數,以便動態分配我的數組。 然后我回放文件,讀取文件中的數據,將數據存儲到變量中,然后將讀取的變量存儲到數組中,但是我遇到了chars問題。

   ...
   char *aname = malloc(sizeof(char) * 3); 
   ... 
   // get # lines in file (count)
   ... 
   char *aname_seen = malloc(count * (sizeof(char) * 3));
   ...
   rewind(file);
   while (fgets(buff, sizeof buff, file) != NULL) 
   {
      if (sscanf(buff, "%s %d %s %s %d %lf %lf %lf %lf %lf\n", 
         atm, &serial, aname, resName, &resSeq, &x, &y, &z, 
         &occupancy, &tempFactor) == 10)
      {
         aname_seen[i] = *aname;
         printf("%d: %s vs %s\n", i, aname, aname_seen[i]);

         i++;

      } // end sscanf if-loop

   } // end while loop

我可以使用printf("%d: %s\\n", i, aname)打印aname並獲得預期的輸出,但是當我嘗試printf("%d: %s vs %s\\n", i, aname, aname_seen[i])時,我遇到了Segmentation fault (core dumped) printf("%d: %s vs %s\\n", i, aname, aname_seen[i])

這個while循環+嵌套if循環是我用來計算行數的相同約定,所以i會遞增計數。 我是否錯誤地分配aname_seen並且實際上沒有給它count char*3元素的數量? 我不太擅長搞亂char。 更多的數字fortran buff,所以我需要一些方向。

提前致謝!

%s格式說明符應該對應於char *參數。 在你的例子中, aname_seen[i]是一個char ,它被提升為一個int ,目的是傳遞給一個可變函數( printf )。 int不是char *

也許你的意思是其中之一:

printf("%d: %s vs %c\n", i, aname, aname_seen[i]);
printf("%d: %s vs %s\n", i, aname, &aname_seen[i]);

如果這些都沒有解決您的問題,請准確解釋您對此表達式的期望,並為我們提供一個最小的,可編譯的測試用例。 您當前的測試用例不可編譯。

你定義的方式aname_seen是一個指向char數組的指針

char *aname_seen = malloc(count * (sizeof(char) * 3));

所以aname_seen[i]是一個char

所以

printf("%d: %s vs %s\n", i, aname, aname_seen[i]);

應該

printf("%d: %s vs %c\n", i, aname, aname_seen[i]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM