我是编程的初学者,目前正在学习C,但是遇到了使我感到困惑的事情。
在我的while循环中,我有:
char* bword = word
fscanf(fp, "%s", word);
其中word是char [46],bword是char *,fp是文件(在这种情况下为单词字典)。我想在扫描fp之前先跟踪该单词,然后再进行替换。在我看来,在更改前将单词分配给变量似乎是合乎逻辑的。但是,如果我在fscanf(fp,'%s“,word)之后打印bword,那么它将被更改为新单词!我真的不明白为什么和如何。
如果我这样做:
bword = word;
printf("1.%s\n", word);
printf("2.%s\n", bword);
// scan the file for a for a word and store in word
fscanf(fp, "%s", word);
printf("3.%s\n", word);
printf("4.%s\n", bword);
我在命令行中得到以下结果:
1.
2.
3.a
4.a
(您不会在1和2之前看到任何内容,因为当时单词为空)。
我还尝试在循环之前将单词分配给“ bar”,但随后得到:
1.bar
2.bar
3.a
4.a
那么我该如何解决呢?我不想改变剑。
最佳答案
您需要了解
char *bword = word;
声明一个指向数组
word
的第一个元素的指针,这意味着修改bword
也会修改word
,因为bword
只是对实际数据位置(数组word
的引用)1如果希望
bword
和word
彼此独立,则将bword
设置为数组,以便将其存储在不同的位置,如下所示char bword[SOME_REASONABLE_SIZE];
从这里,您可以调用
fscanf()
并传递适当的数组,结果将是您之前期望的结果。请注意,当您将数组传递给
fscanf()
时,实际上是在传递指向其第一个元素的指针,恰好是您的bword
首先。1A一般意义上的参考,而不是c ++意义上的参考。