gpt4 book ai didi

c - FILE IO,标记字符串

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:10 25 4
gpt4 key购买 nike

我正在尝试读取逗号分隔文件,并通过逗号分隔符和打印名称创建标记。但名称在标记化后不打印。

names.csv 看起来像

issac,sanchez
anothony,huerta
abbie,lynn
mark,beasly
alyssa,emily

我当前的代码

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
FILE* fp;
char buffer[100];
fp = fopen("names.csv","r");

while(fgets(buffer,sizeof(buffer),fp) != NULL)
printf("%s\n",buffer);
/*OUTPUT issac,sanchez
anthony,huerta
abbie,lynn...etc so buffer is a string??*/


char* del = ",";
char* token;
token = strtok(buffer,del);
while(token != NULL)
{
printf("%s\n",token);
token = strtok(NULL,del);
}

}

最佳答案

如果我不#include <string.h> ,程序段错误。否则,它会工作,打印 alyssa在一条线上和emily在另一个上。

没有 #include <string.h> 的 gcc 输出使用 -Wall 和 -std=c99 标志:

names.c:16:2: warning: implicit declaration of function `strtok` [-Wimplicit-function-declaration]
names.c:16:8: warning: assignment makes pointer from integer without a cast [enabled by default]
names.c:19:9: warning: assignment makes pointer from integer without a cast [enabled by default]

第 16 和 19 行是带有 strtok 的行被调用。由于假定未声明的函数返回 int默认情况下,token是一个指针,则引发警告。

在我的机器上,sizeof(int) != sizeof(char *) ,这会导致生成不正确的代码; token 中只存储了 4 个字节指针及更高版本 printf尝试从 token 中读取 8 个字节— strtok 返回的 8 字节指针中的 4 个有效字节和 4 个随机/未知字节,导致段错误。

关于c - FILE IO,标记字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24563530/

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