strsep() 导致段错误 - 为什么?
strsep() causes segfault - why?
我对指针的指针-const-var-string-char 有点困惑;)
她是我的密码:
char* str_get_var(char *string,char delim)
{
char *found,
*found2,
*teststring;
printf("var string: %s\t",string);
teststring=strdup(string);
printf(" ---- var teststring: %s\n",teststring);
string=strdup(teststring);
found = strsep(&teststring,&delim);
printf("teststring \t var found: %s\n",found);
found2 = strsep(&string,&delim);
printf("string \t\t var found2: %s\n",found2);
return found;
}
int main(int argc, char *argv[])
{
char *message;
char trenner;
char *gefun;
message="ehzg=1";
trenner = '=';
printf("Start\n");
gefun=str_get_var(message,trenner);
printf("Ende\n");
return(0);
}
程序产生以下输出:
Start
var string: ehzg=1 ---- var teststring: ehzg=1
teststring var found: ehzg
string var found2: ehzg
Ende
正如您从代码中看到的那样,我会说不需要测试字符串的 strdup
,因为我希望我可以直接使用 *string
。
但是,一旦我评论以下行,我就会收到 SegFault:
\string=strdup(teststring);
她是注释掉后的输出:
Start
var string: ehzg=1 ---- var teststring: ehzg=1
teststring var found: ehzg
Speicherzugriffsfehler
所以我的问题是:
如何直接对 strsep 使用 *string
?
为什么不使用相同的内容 strdup
时会出现段错误?
(顺便说一句:如果重要,请在 Raspbian 上编码)。
谢谢!
/knebb
strchr
可用于在文字字符串中查找 =
。
#include <stdio.h>
#include <string.h>
char* str_get_var(char *string,char delim)
{
char *found2 = NULL;
printf("var string: %s\t",string);
found2 = strchr ( string, delim);
if ( NULL != found2) {
printf ( "string \t\t var found2: %s\n", found2);
}
return found2;
}
int main(int argc, char *argv[])
{
char *message = "ehzg=1";
char trenner = '=';
char *gefun = NULL;
printf ( "Start\n");
gefun = str_get_var ( message, trenner);
printf ( "Ende\n");
if ( NULL != gefun) {
printf ( "%.*s\n", (int)( gefun - message), message);
printf ( "%s\n", gefun);
}
return(0);
}
我对指针的指针-const-var-string-char 有点困惑;) 她是我的密码:
char* str_get_var(char *string,char delim)
{
char *found,
*found2,
*teststring;
printf("var string: %s\t",string);
teststring=strdup(string);
printf(" ---- var teststring: %s\n",teststring);
string=strdup(teststring);
found = strsep(&teststring,&delim);
printf("teststring \t var found: %s\n",found);
found2 = strsep(&string,&delim);
printf("string \t\t var found2: %s\n",found2);
return found;
}
int main(int argc, char *argv[])
{
char *message;
char trenner;
char *gefun;
message="ehzg=1";
trenner = '=';
printf("Start\n");
gefun=str_get_var(message,trenner);
printf("Ende\n");
return(0);
}
程序产生以下输出:
Start
var string: ehzg=1 ---- var teststring: ehzg=1
teststring var found: ehzg
string var found2: ehzg
Ende
正如您从代码中看到的那样,我会说不需要测试字符串的 strdup
,因为我希望我可以直接使用 *string
。
但是,一旦我评论以下行,我就会收到 SegFault:
\string=strdup(teststring);
她是注释掉后的输出:
Start
var string: ehzg=1 ---- var teststring: ehzg=1
teststring var found: ehzg
Speicherzugriffsfehler
所以我的问题是:
如何直接对 strsep 使用 *string
?
为什么不使用相同的内容 strdup
时会出现段错误?
(顺便说一句:如果重要,请在 Raspbian 上编码)。
谢谢! /knebb
strchr
可用于在文字字符串中查找 =
。
#include <stdio.h>
#include <string.h>
char* str_get_var(char *string,char delim)
{
char *found2 = NULL;
printf("var string: %s\t",string);
found2 = strchr ( string, delim);
if ( NULL != found2) {
printf ( "string \t\t var found2: %s\n", found2);
}
return found2;
}
int main(int argc, char *argv[])
{
char *message = "ehzg=1";
char trenner = '=';
char *gefun = NULL;
printf ( "Start\n");
gefun = str_get_var ( message, trenner);
printf ( "Ende\n");
if ( NULL != gefun) {
printf ( "%.*s\n", (int)( gefun - message), message);
printf ( "%s\n", gefun);
}
return(0);
}