【发布时间】:2014-09-30 22:05:17
【问题描述】:
我对 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]);-->printf("%s\n", word_regular[i]);,printf("%s\n", *norm_word[i]);同上。也没有读取norm_word。但使用strlen(norm_word) -
word_norm[i] = malloc(sizeof(char) * strlen(norm_word) + 1); normalize(word, norm_word);: 交换位置。 -
当我尝试只使用 word_regular[i] 打印 f 时,我收到错误“'%s\n' 需要类型 char * 但参数 2 的类型为 int。知道我如何能够做到解决这个问题? word[] 是 char 类型,所以我假设将其地址复制到 word_regular 会使 word_regular[i] 也属于 char 类型。
-
word_regular[i]的类型是char*。 (因为char * word_regular[100];) -
我就是这么想的。但是,由于某种原因,它给了我一个 int 类型的错误。当我使用 gdb 浏览它时,它看起来不像 strcpy 正在运行,因此没有地址被复制到 word_regular 指向的地址中。任何可能的解决方案?