2017-03-15 19 views
0

ちょっとchar *配列をchar ** 2d配列に変換しようとしています。これは私が取り組んできた機能ですが、私はseg faultsを受けています。 strsepがこれを引き起こしているようですが、私が何をやっているのか、これを修正する方法がわかりません。char *をcharに変換します。delimeter文字列を使用します。

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

char** oneD_to_twoD(char* str){ 
    int cur_size = 20; 
    char* free_me = str; 
    char ** output = malloc(sizeof(char*)*sizeof(str)); 
    int i = 0; 
    char *toks = "\n\t \r\v\f"; 
    char* add_me = str; 
    str = strsep(&str, toks); 
    printf("%s\n", "here"); 
    while(str != NULL){ 
    printf("%s\n", "here"); 
    strcpy(output[i], add_me); 
    add_me = str; 
    i++; 
    if(i == cur_size){ 
     cur_size *= 2; 
     output = realloc(output, sizeof(char*)*cur_size); 
    } 
    str = strsep(&str, toks); 
    } 
    return output; 
} 
int main(int argc, char** argv){ 

    char *str = malloc(sizeof("1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23")); 
    str = "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23"; 
    char** str2 = oneD_to_twoD(str); 
    for (int i = 0; i < 23; ++i) 
    { 
    printf("%s\n", str2[i]); 
    } 
    return 0; 
} 
+1

'str =" 1 2 ... "'申し訳ありませんが、それは完全に間違っています。その文字列を割り当てられたメモリに配置しません。 'str'は文字列* constant *を指すようにします。 'str'を' strsep'に渡すことはできません。その関数は文字列を変更しようとします。文字列をバッファにコピーするには 'strcpy'を使います。 – kaylum

+0

'char **' 2d配列は擬似語です。ポインタは配列ではありません。あなたは2D配列を持っておらず、何も指し示すことができません。 – Olaf

答えて

-1

ダブルポインタであるoutputのメモリ割り当てが間違っています。あなたはこれがcharを初期化する適切な方法でセグメンテーションフォールト

char **output=malloc(sizeof(str)); 
for(i=0;i<sizeof(str);i++) 
{ 
    output[i]=malloc(sizeof(char*)); 
} 

を得ている理由は**です。あなたはあなたのreallocでこれらの変更を適用する必要も.IF親切に私に知らせて問題まだあります。ありがとう

+0

スイングとミス –

+0

ミスと思われるもの –

+0

char **の内容は、すでにchar *要素の1つです。 –

関連する問題