段错误使用strtok_r时 [英] Segmentation Fault when using strtok_r

查看:1058
本文介绍了段错误使用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时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆