【发布时间】:2014-12-26 10:23:39
【问题描述】:
我想剖析以下字符串:
char msg[30] ="Hello 13 1";
char *psh;
int num1;
int num2;
char s[30],s[30];
我试试这个,但是:
pch = strtok (msg," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ");
}
哪个输出:
Hello
13
1
我只想让数字'13'等于num1,数字'1'等于num2:
printf("%d\n",num1);
Output: 13
printf("%d\n",num2);
Output: 1
我试试:
sscanf(sc, "%s %d %d", &s, &num1, &num2);
哪个输出:
Segmentation fault
谢谢
[编辑]
char * pch
char s[30];
char sc[30];
char num1[30];
char num2[30];
pch = strtok (s," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ");
}
sscanf(sc, "%s %d %d", pch, &num1, &num2);
【问题讨论】:
-
不要对字符串使用地址运算符 (
&),它们已经是指针(或者在数组的情况下衰减为指针)。 -
如果您以前从未尝试过使用调试器,那么现在是最佳时机。如果您在调试器中运行程序,它将在崩溃的位置停止。然后,您可以查看函数调用堆栈,甚至沿着调用堆栈向上走,这样您就可以看到您的代码(如果您还没有在那里),然后检查变量的值。至少,请使用调试信息构建(将
-g标志添加到gcc)并在调试器中运行并编辑问题以包含bt调试器命令的输出(显示函数调用堆栈,又名回溯)。
标签: c string substring strtok strncpy