c - 在 C 中使用定界符拆分字符串 - 段错误

标签 c arrays string split char

我想编写一个将字符串拆分为 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;
}

最佳答案

char serverinfo[2];

为两个char分配空间,但是你把char*存储在那里,所以让它成为

char* serverinfo[2];

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

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

并将函数声明为

char **splitString(char stringToSplit[])

正确的类型。

关于c - 在 C 中使用定界符拆分字符串 - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542663/

相关文章:

C:将文件复制到数组中

c - ppc64 的汇编代码

ruby-on-rails - ruby /rails : How can I replace a string with data from an array of objects?

c - 如何将整数变量中的数字分配给字符串

java - 使用 Java 查找句子中的确切单词

c++ - fopen 失败时是否需要 fclose?

c - 是否可以将标准输入/输出设置为 C 中的文件?

arrays - 在 Swift 中将 JSON 数组转换为 Int 数组

c# - 如何在不使用 C# 中的 System.Collection 或 LINQ 的情况下从数组中删除元素?

php - 从数组创建新数组