gpt4 book ai didi

c - 分割文件中的行并比较数组元素

转载 作者:行者123 更新时间:2023-11-30 15:12:44 25 4
gpt4 key购买 nike

我编写了以下代码来分割行,其中字符串用符号“@”分隔,并存储在此处名为“buf”的数组中。如果我比较 array[0] 中存在的任何字符串,则此代码工作正常。但是如果我尝试查找 array[3] 中存在的字符串(例如此处为 'admin'),那么它会出现错误 'segmentation failure' 。谁能帮我找出为什么这段代码没有比较任何其他参数。我将非常感谢这一点。

char **strsplit(const char* str, const char* delim, size_t* numtokens) {
char *s = strdup(str);
size_t tokens_alloc = 1;
size_t tokens_used = 0;
char **tokens = calloc(tokens_alloc, sizeof(char*));
char *token, *rest = s;
while ((token = strsep(&rest, delim)) != NULL) {
if (tokens_used == tokens_alloc) {
tokens_alloc *= 2;
tokens = realloc(tokens, tokens_alloc * sizeof(char*));
}
tokens[tokens_used++] = strdup(token);
}
if (tokens_used == 0) {
free(tokens);
tokens = NULL;
} else {
tokens = realloc(tokens, tokens_used * sizeof(char*));
}
*numtokens = tokens_used;
free(s);
return tokens;
}

main()函数如下:

    int main(void) {
char *line = NULL;
size_t linelen;
char **tokens;
size_t numtokens;
int ret=1;
FILE *ptr_file;
char buf[1000];
system("rm -rf input1.txt");
system("/www/stest/mds1 > input1.txt");
ptr_file =fopen("/www/stest/input1.txt","r");
if (!ptr_file)
return 1;
while (fgets(buf,1000, ptr_file)!=NULL)
{

tokens = strsplit(buf, "@\n", &numtokens);
size_t i;
for ( i = 0; i < numtokens; i++)
{
ret=strcmp(tokens[3],"member");
if(ret==0)
{

printf("%s",buf);

break;
}
}
fclose(ptr_file);
return 0;
return EXIT_SUCCESS;
}

这是上述代码的输出,如果我想打印将“member”作为数组第三个参数的行,则会出现错误。

    abc@google.com@abdu@admin
abc@rediff.com@savya@cashier
abc@yahoo.com.com@andy@member
abc@google.com@susan@group
abc@facebook.com@andre@admin

谢谢。

最佳答案

我怀疑你想要的是这样的:

tokens = strsplit(buf, "@\n", &numtokens);
if(numtokens >= 4 && strcmp(tokens[3],"member") == 0)
{
printf("%s",buf);
}

如 George Houpis 的回答所示,最好仔细检查 strsplit 是否返回空指针。

关于c - 分割文件中的行并比较数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34953077/

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