如何将字符串保存到C中的char指针数组?

时间:2018-04-18 17:35:33

标签: c arrays pointers

我必须通过命令行保存Strings readen并将它们保存到指针数组中。问题是,当我将字符串保存在各自的数组[x] [y]中时,似乎在[x] [y]上的每次更新后它都会影响整个数组。 我使用了一些printf来查看每个udpate之后的数组状态,并始终打印最后添加的值而不是之前应该在数组中的值。 有人能指出我的问题吗?

char *NFAtab[STATES][SYMBOLS];
void init_NFA_table()
{
    char input[STATES+1];
    int index;
    int state;

    DFA_states = 0;
    N_symbols = 2;

    printf("FUNCIONAMENT:\n No hi ha límit d'estats, però es necessari que els estats comencin per l'estat 0.\n Només s'accepten transicions amb a i b.\n");
    printf("Introdueix nombre d'estats:");
    scanf("%d", &NFA_states);
    printf("--------------------------------------------\n");

    printf("Introdueix transicions per cada estat per la 'a' (forma d'introducció: estatestat, sense espaiat; exemple: si va al estat 1 i al 2: 12 | si no hi ha transició '.')\n ------------------------------------------\n");
    int i;
    for (i = 0; i < NFA_states; i++){
        printf("ESTAT %d: ", i);
        scanf("%s", input);
        if (strcmp(input, ".") == 0){
            NFAtab[i][0] = "";
        } else {
            NFAtab[i][0] = input;
            printf("%s\n", NFAtab[i][0]);
        }

        if (i>0){
            printf("%s\n", NFAtab[i-1][0]);
        }
    }

    printf("Introdueix transicions per cada estat per la 'b' (forma d'introducció: estatestat, sense espaiat; exemple: si va al estat 1 i al 2: 12 | si no hi ha transició '.')\n ------------------------------------------\n");
    int x;
    for (x = 0; x < NFA_states; x++){
        printf("ESTAT %d: ", x);
        scanf("%s", input);
        if (strcmp(input, ".") == 0){
            NFAtab[x][1] = "";
        } else {
            NFAtab[x][1] = input;
            printf("%s\n", NFAtab[x][1]);
        }

        if (x > 0){
            printf("%s\n", NFAtab[x-1][1]);
        }
    }

    for (x = 0; x < NFA_states; x++){
        for (i = 0; i < N_symbols; i++){
            printf("ESTAT: %d | SIMBOL: %d : %s\n", x, i, NFAtab[x][i]);
        }
    }

2 个答案:

答案 0 :(得分:0)

首先使用malloc为聊天指针数组NFAtab分配内存,然后使用strcpy函数将字符串复制到内存,因为数组没有复制赋值运算符

使用strcpy将字符串聚合到数组

if (strcmp(input, ".") == 0){
            strcpy(NFAtab[x][1],");
        } else {
           strcpy( NFAtab[x][1],input);
            printf("%s\n", NFAtab[x][1]);
        }

答案 1 :(得分:0)

使用NFAtab[i][0] = input;,您可以将input的地址分配给元素NFAtab[i][0]

当然,您不复制输入,因此每次迭代时,输入都会被覆盖,指向输入的数组元素会显示输入的新值。

您应该使用malloc分配新内存并将输入复制到该内存,然后将该内存分配给arrray alement。