簡體   English   中英

C:字符數組的索引並使用strcmp

[英]C: Indexing of character arrays and using strcmp

我不小心運行了昂貴的模擬,在for循環中隱藏了一個額外的printf語句,從而創建了大約10 GB的文件,而不是大約10 KB的文件。

重新運行模擬不是最好的選擇,因此即使我沒有接受過C的正式培訓,我還是決定努力解決問題。

我正在嘗試通過創建一個程序來解決這些問題,該程序可以讀取這些大文件,並且僅打印出(x,y,t,n)形式的行,其中(x,y,t,n為int,int,長雙,長雙)。 其他行是基本描述某些參數的字符串,數字和空格的組合,但是所有(百萬)行不需要的行都以字母“ i”開頭。

因此,我認為我將嘗試在此處遵循此代碼示例: 在C語言中讀取文件時跳過一行

int main(int argc, char *argv[])
{
     FILE *f;

     if((f = fopen(argv[1], "r")) == NULL)
     {
         printf("Couldn't open file. \n");
         return(0);
     }

     char buf[500];

     while(fgets(buf, sizeof(buf), f) != NULL)
     {

         if(strcmp(&buf[0], "i") != 0)
         {
             printf("%s \n", buf);
         }

     }
}

所以似乎線

if(strcmp(&buf[0], "i") != 0)

即使行的第一個元素為“ i”,該行實際上也不會打印,實際上並不能工作。 有趣的是,如果我在if語句中添加它:

printf("%c \n", buf[0]);

即使我試圖使if語句失敗的條件,“ i”仍然可以打印。 有趣的是,線

printf("%s \n", &buf[0]);

只是打印與

printf("%s \n", buf);

我試圖重寫

if(strcmp(&buf[0], "i") != 0)

if(strcmp(buf[0], "i") != 0)

但剛剛收到一個錯誤。

如何正確比較每行的第一個元素和所選字符“ i”?

您可以使用strncmp()而不是strcmp()來比較字符串的n個元素。

if語句應該類似於if((strncmp(buf,"i",1))!=0) 。現在它將只比較one元素,即存儲在buf的字符串的1st one元素與i

但是對於第一個元素,您可以簡單地使用if(buf[0]=='i')

暫無
暫無

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

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