首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strsep()会导致段错误-为什么?

strsep()会导致段错误-为什么?
EN

Stack Overflow用户
提问于 2020-12-15 22:42:19
回答 1查看 62关注 0票数 1

我有点困惑指针指针-const-var-string-char ;)她是我的代码:

代码语言:javascript
复制
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);
}

程序员产生以下输出:

代码语言:javascript
复制
Start
var string: ehzg=1       ---- var teststring: ehzg=1
teststring       var found: ehzg
string           var found2: ehzg
Ende

正如您可能从代码中看到的,我会说不需要测试字符串的strdup,因为我希望我可以直接使用*string。但是,只要我对下面这行进行注释,就会得到一个SegFault:

代码语言:javascript
复制
\\string=strdup(teststring);

这是注释掉后的输出:

代码语言:javascript
复制
Start
var string: ehzg=1       ---- var teststring: ehzg=1
teststring       var found: ehzg
Speicherzugriffsfehler

所以我的问题是:如何直接将*string用于strsep?为什么在不使用相同内容执行strdup时会出现段错误?

(顺便说一句:在Raspbian上编码,如果重要的话)。

谢谢!/knebb

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-15 23:20:48

strchr可用于在文字字符串中查找=

代码语言:javascript
复制
#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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65308101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档