【问题标题】:Splitting string with delimiters in C - segmentation fault在 C 中使用分隔符拆分字符串 - 分段错误
【发布时间】:2023-03-31 08:47:01
【问题描述】:

我想编写一个将字符串拆分为 char 数组的函数。我知道结果数组总是只有两个元素——服务器名和服务器端口。我写了这个,但编译后它给了我“分段错误”:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* splitString(char stringToSplit[])
{
    int i = 0;
    char serverinfo[2];
    char *tmp;
    tmp = strtok(stringToSplit, ":");
    while (tmp != NULL)
    {
        serverinfo[i] = tmp;
        tmp = strtok(NULL, ":");
        i++;
    }
    return serverinfo;
}

int main(int argc, char **argv)
{
    char st[] = "servername:1234";
    char *tab = splitString(st);

    printf("%s\n", tab[0]);
    printf("%s\n", tab[1]);

    return 0;
}

【问题讨论】:

  • 顺便说一句,gdb 有助于了解故障所在。

标签: c arrays string split char


【解决方案1】:
char serverinfo[2];

为两个chars 分配空间,但你将char*s 存储在那里,所以让它

char* serverinfo[2];

但是你是从函数中返回的,但是函数返回后局部变量就不存在了,所以你需要malloc

char **serverinfo = malloc(2*sizeof *serverinfo);

并将函数声明为

char **splitString(char stringToSplit[])

为正确的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2015-06-29
    相关资源
    最近更新 更多