【发布时间】:2014-05-02 12:11:27
【问题描述】:
我是 C 的新手(来自 Java),这自然会带来一些困难。我只想编写一个简短的程序,从标准输入读取字符数组并将各个字符串存储在一个数组中。读完字符串后,我只想将它们打印出来,但这对我来说真的很困惑。 这是我的代码:
#include <stdlib.h>
#include <stdio.h>
int main(){
char **stringarray[2];
char buffer[5];
int i = 0;
while( i < 2 && fgets(buffer, 5, stdin) != NULL){
char *tmp = buffer;
stringarray[i] = &tmp;
i++;
}
for(int i = 0; i < 2; i++){
printf("%s\n", &stringarray[i]);
}
return 0;
}
第一部分实际上是编译的(即打印输出之前的部分)。我知道我的 stringArray 必须是一个 char 指针数组,因为这就是 c 中的 char 数组。它是指向第一个字符的指针。一开始我只是写了
while( i < 2 && fgets(buffer, 5, stdin) != NULL){
stringarray[i] = buffer;
i++;
}
它也已编译,但当然我有一个指向缓冲区的指针,它只会保存已读取的最后一个字符串。 我需要做什么才能存储一个简单的字符串数组?
【问题讨论】:
-
您不需要array of pointers to pointers。一个指针数组就足够了。
-
在您的
printf("%s\n", &stringarray[i])中,您正在获取第 i 个元素的 地址(&-运算符)。这肯定不是你想要的。 -
好的,我又改了一次,但我仍然有一个问题,我不知道在循环的一次迭代期间如何永久存储缓冲区指向的内容。
-
地址操作员是偶然出现的。很抱歉造成额外的混乱