【发布时间】:2012-07-09 18:21:28
【问题描述】:
我有一个包含空格的字符串,例如“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);
【问题讨论】:
-
好吧,你永远不会初始化测试,所以你不能用 strtok 访问它。
-
用一个空的填充字符串初始化它都有段错误。
-
COMMAND 初始化了吗?它是否包含“ ”?
-
我认为你的第一个 sn-p 代码来自一个名为
Print的函数;那么我们能看到它的定义是如何开始的吗? (特别是,我想知道你到底是如何声明COMMAND,它似乎存在于两个版本中,一个在Print中,一个在任何调用Print中。)我们可以看到COMMAND是如何传递到Print函数获得了它的价值?您描述的所有内容都与具有错误值的变量一致 - 例如,空指针或指向非空终止字符串的指针。 -
@Sterling 它包含一个字符串,可能带有空格,例如“print 2”。
标签: c string pointers split strtok