我有一个包含空格的字符串,例如“print 2”或“print 3 test”。我试图删除第一个参数 - 在这些例子中,打印。
我试过strtok():
char *test;
test = strtok(COMMAND, " ");
printf("%s\n", test);
然而,打印测试将是段错误。我尝试创建一个函数,它从main()工作正常但是当从函数中调用时我需要它,它也是段错误。
char* split(char S[], int N) {
printf("Running split() on %s\n", S);
int Spaces = 1;
int i = 0;
for (i; i<strlen(S) && Spaces <=N; i++) {
if (S[i] == ' ') {
Spaces++;
}
}
printf("split: %s\n", &S[i]);
//return "0";
return &S[i];
}
我猜它是某种指针问题。正在将命令传递给print函数:
Print(File, Lines, COMMAND);
答案 0 :(得分:2)
我不知道你的测试样本中有什么命令,但你应该测试一下,如果strtok返回null(当strtok找不到令牌时)。 带有nullpointer的printf将为您提供seg保险库。
通常你从一个循环中调用strtok: http://www.cplusplus.com/reference/clibrary/cstring/strtok/
答案 1 :(得分:0)
始终测试strtok()的返回值!
如果没有找到这样的字节(第二个参数),即。第一个参数指向的字符串中不存在令牌,返回空指针。