c中的字符串数组

时间:2016-10-19 08:39:41

标签: c

好的,你可以看到我有问题。我正在尝试使用名为tab_string的函数在C中创建一个字符串数组。如果您尝试运行以下代码,您将看到我的测试编号为2的段错误,我不知道为什么因为第一次测试工作。提前致谢

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

}

2 个答案:

答案 0 :(得分:0)

你的功能应该是

void create_tab_string(char chaine[], char*** p_tab_string) {
    char *test = "Hey";
    char *test2= "blabla";

    // Allocation
    *p_tab_string = malloc(NB_STRING*sizeof(char*));

    // Test
    (*p_tab_string)[0] = test;
    printf("%s \n", (*p_tab_string)[0]);

    (*p_tab_string)[1] = test2;
    printf("I have the second string \n");
    printf("%s \n", (*p_tab_string)[1]);
}

首先,测试c-strings(数组)的地址是函数本地的,不能在外部访问。 正如您所看到的,我将它们更改为字符串文字的简单指针,因此可以在函数外部访问字符串文字。

第二件事是您解除引用指针的方式。

使用*p_tab_string[1]您解除引用不存在的p_tab_string的第二项。

使用(*p_tab_string)[1]您可以取消引用*p_tab_string指向的第二项内容,即tab_string声明为main

答案 1 :(得分:0)

您遇到运营商优先权问题。

您需要使用:

(*p_tab_string)[1]

而不是*p_tab_string[1]

此外,正如注释中所写,您的测试字符串是本地函数,在函数范围之外不可用。您需要复制它们或使用指针。