C++相談室 part23

このエントリーをはてなブックマークに追加
269
C言語で文字列を解析する関数を作りたいんですけど、
char同士の代入のあたりでコアダンプしてしまいます。
どうすればいいか教えていただけませんか?

$ cat whyerror.c
#include <stdio.h>
#include <stdlib.h>
int test(char ** string_ptr, char * string) {
    int len = 0;
    *string_ptr = (char *)malloc(sizeof(char));
    while (*string) {
        printf("%d: %c\n", ++len, *string++);
        *string_ptr = (char *)realloc(*string_ptr, sizeof(char) * (len + 1));
        **string_ptr++ = *string++; /* ??? */
    }
    **string_ptr = '\0';
    return 0;
}
int main(void) {
    char * string;
    char * result;
    string = "this is test!";
    test(&result, string);
    printf("result: %s\n", result);
    return 0;
}

$ gcc whyerror.c -Wall; ./a.exe
1: t
2: i
Segmentation fault (core dumped)
>>269
スレタイ255回読み直してから出直してこい
271:03/09/18 19:42
>>270
ご、ごめんなさい。。。
ぜんぜん気付きませんでした。
逝ってきます。
>>270がいいこと逝った。
文字列の解析とかCではやりたくない罠。
std::string / boost::regex とか使えば早いかも。
273:03/09/18 19:49
>>272
でもそれ以前に、/* ??? */ の一行が間違っていそうな気が
するんですが、何がどう間違っているかが分からないんです。
ポインタの扱い方を勘違いしているのかな?
charにcharってそのまま代入してもいいんですよね?

#どこで聞けばいいのか分からない・・・。
#宿題じゃないけど宿題スレにでも行こうかな。。。
>>273
C言語なら俺様に聞け! Part 64
http://pc2.2ch.net/test/read.cgi/tech/1061779941/

ちなみになんで落ちるかっつーとreallocの第一引数がmalloc/reallocで確保された
メモリ領域を指していないから。原因はstring_ptr++;