[英]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.