所以我在c中有这个代码。一切正常,直到我再次读到单词。它得到了新单词但是(* A)[size-1]取了新单词的价格我怎么阻止这个?
void fuction(char ***A,char ***B,int size)
{
char word[20],word2[20];
printf("Type word .\n");
gets(word);
while(strcmp(word,"0")!=0)
{
printf("Type second word.\n");
gets(word2);
printf("%d",size);
**A=realloc(**A,(size+1)*sizeof(char));
**B=realloc(**B,(size+1)*sizeof(char));
(*A)[size-1]=word;
(*B)[size-1]=word2;
size++;
printf("Type another word to add or 0 to exit.\n");//**it all works fine**
gets(word);
}
}
答案 0 :(得分:2)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void function(char ***A, char ***B, int *size){
char word[32], word2[32];
printf("Type first word.\n");
scanf("%31s", word);
while(strcmp(word,"0")!=0){
printf("Type second word.\n");
scanf("%31s", word2);
*A =realloc(*A, (*size+1)*sizeof(char*));
*B =realloc(*B, (*size+1)*sizeof(char*));
(*A)[*size]=strdup(word);
(*B)[*size]=strdup(word2);
++*size;
printf("Type another word to add or 0 to exit.\n");
scanf("%31s", word);
}
}
int main(void){
int i, size = 0;
char **w1, **w2;
w1 = w2 = NULL;
function(&w1, &w2, &size);
for(i = 0; i < size; ++i){
printf("%s, %s\n", w1[i], w2[i]);
free(w1[i]);free(w2[i]);
}
free(w1);free(w2);
return 0;
}
答案 1 :(得分:2)
原来问题是我没有为数组中的单词分配内存。我添加了这些行并且它工作。谢谢你的答案。
(*A)[size-1]=(char*) malloc(31);
(*B)[size-1]=(char*) malloc(31);
答案 2 :(得分:0)
此
(*A)[size-1]=word;
(*B)[size-1]=word2;
不是你想象的那样。
在c中,这意味着如果您希望这样做,则将地址分配给数组word
的第一个元素(*A)[size-1]
,前提是您已为(*A)[size-1]
分配了内存你应该这样做
strcpy((*A)[size-1], word);
strcpy((*B)[size-1], word2);
您应该考虑为什么需要char ***
,通常您不需要char **
以上,并且不要使用gets()
来代替fgets()
。< / p>