1

文字列を char 配列に分割する関数を書きたいと思います。結果の配列には、常にサーバー名とサーバーポートの 2 つの要素しかないことがわかっています。私はこれを書きましたが、コンパイル後に「セグメンテーション違反」が発生します:

#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;
}
4

1 に答える 1

3
char serverinfo[2];

は 2 つの s 用のスペースを割り当てますが、そこに scharを格納char*するので、それを作成します

char* serverinfo[2];

ただし、関数から返しますが、関数が返された後、ローカル変数はもう存在しないため、それが必要mallocです

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

関数を次のように宣言します

char **splitString(char stringToSplit[])

正しいタイプのために。

于 2012-11-24T15:35:14.277 に答える