C真的不是我的强项,在阅读了一本关于这个主题的书的三章之后,花了很多年的时间试图让它们起作用它就没有了:
#include <stdio.h>
char *a,*b;
int main( )
{
char input[10];
fgets(input,sizeof input, stdin);
a = input;
fgets(input,sizeof input, stdin);
b = input;
printf("%s : %s",a,b);
}
我已从主要项目中分离出问题。此代码用于读取两个字符串然后打印它们,但它似乎是设置a和b指向输入。输入A和B时此代码的输出样本是(不要担心\ n我可以删除它们):
A
B
B
: B
如何将输入值存储在另一个变量中,例如。 a或b,以便在上述情况下
A
B
A
: B
输出?
注意:我不希望a或b指向另一个我希望在其中存储字符串的变量:
a = "A";
b = "B";
将是字符串文字等效。
由于
答案 0 :(得分:4)
您必须将a
和b
声明为与输入数组一样大的单独数组,或者为它们动态分配内存。无论哪种方式,您都必须使用strcpy()
将一个字符串的内容复制到另一个字符串:
#include <stdio.h>
#include <string.h>
int main(void)
{
char input[10], a[10], b[10];
fgets(input, sizeof input, stdin);
strcpy(a, input);
fgets(input, sizeof input, stdin);
strcpy(b, input);
printf("%s : %s\n", a, b);
return 0;
}
答案 1 :(得分:2)
a是指向输入的指针,b是。设置a = input只是将a设置为指向输入。
因此,您对fgets
的调用会影响同一个缓冲区。
您应该为A和B使用两个单独的数组,并将数据从输入复制到A和B.
注意:我不希望a或b指向另一个我希望在其中存储字符串的变量:
a =“A”;
b =“B”;
将是字符串文字等效。
不幸的是,C并不像你想象的那样工作。你已经习惯了为你做复制的高级语言。
在C中,如果您希望A和B包含数据,则必须指定数据容器,并在其中放置数据。
例如:
int main( )
{
char input[10];
char aData[10];
char bData[10];
fgets(input,sizeof input, stdin);
strcpy(aData, input);
fgets(input,sizeof input, stdin);
strcpy(bData, input);
printf("%s : %s",aData,bData);
}
答案 2 :(得分:1)
使用2个不同的char缓冲区数组。
指针只是一个保存内存地址的变量。
所以在下面的代码中:
a = input;
和
b = input;
a
和b
都拥有相同的内存地址,该内存地址是数组第一个元素的地址。
这是正确的代码:
char input1[10];
char input2[10];
fgets(input,sizeof input1, stdin);
fgets(input,sizeof input2, stdin);
printf("%s : %s",input1, input2);
另外,当您使用sizeof(pointer)
时,您将始终在x86系统上获得4。你没有得到你指向的元素的大小。
答案 3 :(得分:1)
您需要为每个输入使用单独的数组,因此第二个输入不会覆盖第一个。
#include <stdio.h>
int main( )
{
char a[10];
char b[10];
fgets(a,sizeof a, stdin);
fgets(b,sizeof b, stdin);
printf("%s : %s",a,b);
}