【问题标题】:Splitting string by '/' failed, C [duplicate]用'/'分割字符串失败,C [重复]
【发布时间】:2014-06-19 13:47:34
【问题描述】:

我想用'/'分割一个字符串并将字符串中的char'/'更改为'/0',所以我写了一个这样的函数:

void parse_query(char* str){
    char* p = str;
    char** r = (char**)malloc(sizeof(char*)*5);
    int i = 0;
    r[i++] = p;
    while(p=strchr(p,'/')){
        *p = '/0';
        p++;
        r[i++] = p;
    }
}

当我运行如下程序时:

char* s = "a/b";
parse_query(s);

分段错误发生在这一行:

*p = '/0';

谁能给我一个建议?

【问题讨论】:

标签: c string split


【解决方案1】:
When I ran the program like below:

char* s = "a/b";

所以您正在修改字符串文字"a/b",即undefined behaviour。如果你想修改它,那么使用这样的数组:

char s[] = "a/b";
parse_query(s);

此外,您应该这样做(如 AntonH 所述):

*p = '\0'; 


*p = 0;

终止字符串。 '/0''\0' 不同。

【讨论】:

  • 哦,谢谢,可以了。
【解决方案2】:

替换:

*p = '/0';

实际上不是一个字符,而是两个,带有:

*p = '\0';

p 指向的值替换为零值。这就是我相信你想要的。

【讨论】:

    【解决方案3】:

    除了它应该是'\0'之外,我认为分段错误源于字符串"a/b"是一个文字,并且这些通常存储在只读内存中。这意味着您可能无法写入该内存,如果您尝试,则会遇到分段错误。

    将文字字符串复制到可写缓冲区中并在上面尝试。我敢打赌它会起作用。

    【讨论】:

    • 你的意思是'\0'而不是"\0",不是吗?
    • @AntonH:是的,当然。
    猜你喜欢
    • 2016-02-14
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多