我是 C 的新手;在类里面学习了 3 周。我在使用指针时遇到了一些麻烦,并且确信可能有一个简单的解决方法。所以基本上,这个程序应该从输入文件中读取一个单词,将其存储在一个内存分配的指针数组中,打印单词和单词的规范化形式(无关过程),然后重新分配空间,以便指针数组将随着输入更多的单词而增长。但是,我在打印单词和重新分配数组时遇到了一些麻烦(我目前将其设置为固定大小只是为了解决整个打印方面的问题)。如果我的变量声明有问题,或者我只是犯了一个愚蠢的错误,请告诉我(我确信这可能是两者的结合)。同样,我是 C 的新手,所以如果这是一个简单的问题,我深表歉意。
char * word_regular[100];
char * word_norm[100];
int main (int argc, char * argv[])
{
if (argc != 2){
printf("You have not entered a valid number of files.\n");
exit(1);
}
FILE * f_in = fopen(argv[1],"r");
int i = 0;
char word[512];
char norm_word[512];
while(fscanf(f_in, "%s", word) != EOF) {
if (is_valid_entry(word)) {
word_regular[i] = malloc(sizeof(char) * strlen(word) + 1);
strcpy(word_regular[i],word);
printf("%s\n",*word_regular[i]);
word_norm[i] = malloc(sizeof(char) * strlen(norm_word) + 1);
normalize(word, norm_word);
strcpy(word_norm[i],norm_word);
printf("%s\n", *word_norm[i]);
i++;
最佳答案
您当前代码存在的一些问题(忽略动态大小需求而不是固定大小,因为您已经说过您正在使用它进行调试),
printf("%s\n",*word_regular[i]);
%s 需要一个 char * 用于打印,所以它应该是
printf("%s\n",word_regular[i]);
对于第二个printf,由于norm_word本身就是一个char数组,
你应该简单地使用
printf("%s\n", &norm_word[i]);
如果要从第 i 个索引开始打印字符串。
更新: 一个快速提示是注意您是否正在复制\0 和字符串。因为你的 api 调用,例如 strlen 会超出字符串崩溃(或最糟糕的静默),除非它是 null 终止的。
关于c - C 中的指针和重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130921/