我必须通过命令行保存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]);
}
}
答案 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。