gpt4 book ai didi

C:字符数组索引并使用 strcmp

转载 作者:行者123 更新时间:2023-11-30 16:41:50 24 4
gpt4 key购买 nike

我不小心运行了昂贵的模拟,并在 for 循环中隐藏了额外的 printf 语句,创建了约 10 GB 的巨大文件,而不是约 10 KB 的文件。

重新运行模拟并不是最好的选择,因此我决定尝试解决这个问题,尽管我没有接受过任何正式的 C 培训。

我试图通过创建一个程序来读取这些巨大的文件,并仅打印出 (x, y, t, n) 形式的行,其中 (x, y, t, n 是 int) 来解决这个问题、 int、长 double 、长 double )。其他行是字符串、数字和空格的组合,基本上描述了某些参数,但所有(数百万)不需要的行都以字母“i”开头。

所以我想我应该尝试遵循此代码的示例:Skip a line while reading a file in 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”,该行的 printf 仍然会打印。有趣的是,如果我将其添加到 if 语句中:

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

“i”仍然可以打印,即使我试图将其作为 if 语句失败的条件。有趣的是,该行

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)。现在它只会比较 一个 元素,即存储在 bufi 中的字符串的 1st 元素。

但对于第一个元素,您可以简单地使用 if(buf[0]=='i')

关于C:字符数组索引并使用 strcmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com