当前位置: 技术问答>linux和unix
strtok()问题
来源: 互联网 发布时间:2015-09-24
本文导语: 调用 strtok()函数执行的时候为什么老是提示Segmentation fault错误。简单的程序如下: #include #include #include #include #include #include main() ...
调用 strtok()函数执行的时候为什么老是提示Segmentation fault错误。简单的程序如下:
#include
#include
#include
#include
#include
#include
main()
{
char *s="Golden:Global:View";
char *d=":";
char *p;
p=strtok(s,d);
printf("%sn",s);
return 0;
}
#include
#include
#include
#include
#include
#include
main()
{
char *s="Golden:Global:View";
char *d=":";
char *p;
p=strtok(s,d);
printf("%sn",s);
return 0;
}
|
enidzhangyun(白云) ( ) 信誉:100 2005-04-13 15:44:00 得分: 0
gaoxianfeng(高) :使用之前加上memset(New_p, 0, sizeof(New_p));
strncpy(New_p,buf,strlen(buf)); //???
:)
你知道buf 这个str多大吗?
如果大于New_p的容量会如何?
strncpy(New_p,buf,Min(sizeof(New_p)-1,strlen(buf)));
New_p[sizeof(New_p)-1] = '';
strncpy主要就是怕人用strcpy造成内存异常
gaoxianfeng(高) :使用之前加上memset(New_p, 0, sizeof(New_p));
strncpy(New_p,buf,strlen(buf)); //???
:)
你知道buf 这个str多大吗?
如果大于New_p的容量会如何?
strncpy(New_p,buf,Min(sizeof(New_p)-1,strlen(buf)));
New_p[sizeof(New_p)-1] = '';
strncpy主要就是怕人用strcpy造成内存异常
|
strtok会修改原字符串,你的远程不能修改,
临时申明一个变量,然后将s拷贝到这个变量中,将这个变量代替s传给strtok
欢迎访问我的个人网站 www.linuxc.net
临时申明一个变量,然后将s拷贝到这个变量中,将这个变量代替s传给strtok
欢迎访问我的个人网站 www.linuxc.net
|
你被网上的例子误导
strtok(s,d);
这个函数是要查找s字串里面是否有d字符
如果有就会把s字串里的d字符用''替换 这时候就有写入了
而你的char *s="Golden:Global:View"; 是静态区的变量 不可写的
如果你用strcpy(s, "test"); 也会内存异常
所以你应该改成
char s[]="Golden:Global:View";
strtok(s,d);
这个函数是要查找s字串里面是否有d字符
如果有就会把s字串里的d字符用''替换 这时候就有写入了
而你的char *s="Golden:Global:View"; 是静态区的变量 不可写的
如果你用strcpy(s, "test"); 也会内存异常
所以你应该改成
char s[]="Golden:Global:View";
|
原型:extern char *strtok(char *s, char *delim);
用法:#include
功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。
说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。
strtok在s中查找包含在delim中的字符并用NULL('')来替换,直到找遍整个字符串。
返回指向下一个标记串。当没有标记串时则返回空字符NULL。
strtok会修改字符串内容
用法:#include
功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。
说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。
strtok在s中查找包含在delim中的字符并用NULL('')来替换,直到找遍整个字符串。
返回指向下一个标记串。当没有标记串时则返回空字符NULL。
strtok会修改字符串内容
|
借地方问一下,char* s="abcd";和char s[]="abcd";这两条语句的区别是否就在于第一个s只是一个指向常量字符串的指针,而第二个s则是申请了一段内存来存储变量,而该变量的内容被初始化为"abcd"
|
是的
而第二个s则是申请了一段内存来存储变量,而该变量的内容被初始化为"abcd"
其实是 abcd 五个字符
而第二个s则是申请了一段内存来存储变量,而该变量的内容被初始化为"abcd"
其实是 abcd 五个字符
|
strtok_r是线程安全
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。