です。わかりましたので問題があります。私はtab_stringと呼ばれる関数でCで文字列の配列を作成しようとしています。次のコードを実行しようとすると、テスト番号2のsegfaultがあることがわかります。最初のテストが動作する理由はわかりません。事前のおかげで文字列の配列は
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NB_STRING 2
void create_tab_string(char chaine[], char*** p_tab_string) {
char test[] = "Hey";
char test2[] = "blabla";
// Allocation
*p_tab_string = (char **)(malloc(NB_STRING*sizeof(char*)));
// Test
*p_tab_string[0] = test;
printf("%s \n", *p_tab_string[0]);
// Test 2 ERROR ?????
*p_tab_string[1] = test2;
printf("I have the second string \n");
printf("%s \n", *p_tab_string[1]);
}
int main() {
int i;
char string_test[] = "I am a test";
char **tab_string;
create_tab_string(string_test, &tab_string);
for(i = 0; i < NB_STRING; i++)
printf("%s \n", tab_string[i]);
return 0;
}
テスト文字列は関数内でローカルであり、関数スコープ外では使用できません。 – LPs
testとtest2に文字列を割り当てるには 'strdup'を使います –