gpt4 book ai didi

c - 从不同的文件读取并在字符串上使用 strtok

转载 作者:行者123 更新时间:2023-11-30 17:06:10 25 4
gpt4 key购买 nike

所以这是一个从 2 个不同文件 (firSTLine//secondary)** 读取 3 个字符串 (orig//test1//orig_copy) 的代码,并调用divide_string来使用 strtok 和获取 token 并将其存储在 **(token_orig//token_test//token_orig_copy) 中, --> 这就是问题所在:- 当我将这三行放入 main 中时,它会编译并从所有 3 个字符串和“Done”中获取 token 。到底。-但是当我尝试接下来的三行时(注意我如何将“HAHAHAH”更改为“HAHAHAHA”),这个小小的改变改变了一切,并使程序停止在 printf("对于第二个字符串 :"); 。我希望我解决了问题 PS:你可以直接复制程序,这样你就可以轻松地自己编译

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char s[4] = " ,.";
int divide_string(char* thestring,char** destination)
{
int i=0;
char* token=strtok(thestring,s);
destination[i]=malloc(sizeof(token)+1);
strcpy(destination[i],token);
i++;
printf("the word %d is 'tokened' \n",i);
while(token!=NULL)
{
token =strtok(NULL,s);
if (token != NULL)
{
destination[i]=malloc(sizeof(token)+1);
strcpy(destination[i],token);
printf("the word %d is 'tokened' \n",i);
++i;
}
}
return i;
}
void main ()
{ //TRY THESE THREE LINES THAT WORKS<-----------------------------
char orig[]= "does work HAHAHAH";
char orig_copy[] = "does work HAHAHAH";
char test1[]="does work HAHAHAH";
// char orig[]= "doesnt work HAHAHAHA";
// char orig_copy[] = "doesnt work HAHAHAHA";
// char test1[]="doesnt work HAHAHAHA";
char *token_orig[81];
char *token_test[81];
char *token_orig_copy[81];
strcpy(orig_copy,orig);
printf("for string number one : \n");
int max_orig = divide_string(orig,token_orig);
printf("for string number two : \n");
int a = divide_string(orig_copy,token_orig_copy);
printf("for string number three : \n");
int max_test = divide_string(test1,token_test);
printf("%s-",token_orig[0]);
printf("%s-",token_orig[1]);
printf("%s-\n",token_orig[2]);
printf("%s-",token_orig_copy[0]);
printf("%s-",token_orig_copy[1]);
printf("%s-\n",token_orig_copy[2]);
printf("%s-",token_test[0]);
printf("%s-",token_test[1]);
printf("%s-\n",token_test[2]);
printf("done .");
return 0;
}

最佳答案

由于 token 是一个指针,sizeof(token) 为您提供指针变量的大小(可能是 4 或 8 个字节),而不是它指向的字符串中的字符数!你想要:

strlen(token) + 1

代替(+1 表示\0)。

sizeof 唯一对字符串有用的时候是像这样的文字:

sizeof("Hello World")

关于c - 从不同的文件读取并在字符串上使用 strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866713/

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