ちょっと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;
}
'str =" 1 2 ... "'申し訳ありませんが、それは完全に間違っています。その文字列を割り当てられたメモリに配置しません。 'str'は文字列* constant *を指すようにします。 'str'を' strsep'に渡すことはできません。その関数は文字列を変更しようとします。文字列をバッファにコピーするには 'strcpy'を使います。 – kaylum
'char **' 2d配列は擬似語です。ポインタは配列ではありません。あなたは2D配列を持っておらず、何も指し示すことができません。 – Olaf