本文介绍了段错误使用strtok_r时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
任何人能解释为什么我在下面的例子中得到段错误?
的#include<&stdio.h中GT;
#包括LT&;&string.h中GT;诠释主要(无效){
字符*您好=世界您好,我住。
字符*令牌[50];
strtok_r(你好,令牌);
INT I = 0;
而(ⅰ小于5){
的printf(%S \\ n,令牌[我++]);
}
}
解决方案
试试这个:
的#include<&stdio.h中GT;
#包括LT&;&string.h中GT;诠释主要(无效){
焦你好[] =世界您好,我住。 //使这个字符数组不是指针字面。
字符*休息; //指向令牌提取后的字符串的其余部分。
字符*记号。 //指向返回的实际令牌。
字符* PTR =您好; //使q点开始打招呼。 //循环直到strtok_r返回NULL。
而(标记= strtok_r(PTR,&安培;其他)){ 的printf(%S \\ N标记); //打印返回的令牌。
PTR =休息; //其余包含遗留part..assign它PTR ......并重新开始记号化处理。
}
}
/ *
输出:
你好
世界
让
我
生活。
* /
Can anyone explain why I am getting segmentation fault in the following example?
#include <stdio.h>
#include <string.h>
int main(void) {
char *hello = "Hello World, Let me live.";
char *tokens[50];
strtok_r(hello, " ,", tokens);
int i = 0;
while(i < 5) {
printf("%s\n", tokens[i++]);
}
}
解决方案
Try this:
#include <stdio.h>
#include <string.h>
int main(void) {
char hello[] = "Hello World, Let me live."; // make this a char array not a pointer to literal.
char *rest; // to point to the rest of the string after token extraction.
char *token; // to point to the actual token returned.
char *ptr = hello; // make q point to start of hello.
// loop till strtok_r returns NULL.
while(token = strtok_r(ptr, " ,", &rest)) {
printf("%s\n", token); // print the token returned.
ptr = rest; // rest contains the left over part..assign it to ptr...and start tokenizing again.
}
}
/*
Output:
Hello
World
Let
me
live.
*/
这篇关于段错误使用strtok_r时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!