C 字符串的子字符串并将其打印出来
我要删除以下字符串:C 字符串的子字符串并将其打印出来,c,string,substring,strtok,strncpy,C,String,Substring,Strtok,Strncpy,我要删除以下字符串: 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 Segmentation fault
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
Segmentation fault
我只想让数字'13'等于num1,数字'1'等于num2:
printf("%d\n",num1);
Output: 13
printf("%d\n",num2);
Output: 1
我尝试:
sscanf(sc, "%s %d %d", &s, &num1, &num2);
哪些产出:
Hello
13
1
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);
使用以下功能:
sscanf(msg, "%s %d %d", s, &num1, &num2);
这将导致您的代码看起来像这样:
#include <stdio.h>
int main()
{
char msg[30] = "Hello 13 1";
int num1, num2;
char s[30];
sscanf(msg, "%s %d %d", s, &num1, &num2);
printf("%d\n%d\n", num1, num2);
return 0;
}
#包括
int main()
{
char msg[30]=“你好13 1”;
int num1,num2;
chars[30];
sscanf(消息,“%s%d%d”、s和num1和num2);
printf(“%d\n%d\n”,num1,num2);
返回0;
}
如果您有代码
pch = strtok (s," ");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ");
}
sscanf(sc, "%s %d %d", pch, &num1, &num2);
然后您就有了,因为您试图写入NULL
指针
循环后,pch
将为NULL
另外,num1
和num2
是字符数组(例如字符串),但您尝试将数字提取为整数。虽然数组足够大,可以容纳整数值,但如果希望将它们作为实际整数,则仍然是错误的
您还应该注意修改输入字符串。不要对字符串使用运算符地址(
&
),它们已经是指针(或者在数组的情况下是指针的衰减)。如果您以前从未尝试过使用调试器,现在正是最好的时机。如果在调试器中运行程序,它将在崩溃位置停止。然后,您可以查看函数调用堆栈,甚至可以查看调用堆栈,这样您就可以查看代码(如果还没有),然后检查变量的值。至少,请使用调试信息构建(将-g
标志添加到gcc
)并在调试器中运行,并编辑问题以包括bt
调试器命令的输出(显示函数调用堆栈,也称为回溯)。您应该检查sscanf()的返回值
在依赖具有正确值的变量之前。