C 数组";指针;关于价值的书写?
我试图从用户那里获取5个字符串,并将该字符串存储到一个char字符串数组中,但是,当我尝试使用该程序时,该程序的输出总是相同的,用户输入的最后一个值 请参阅我的代码:C 数组";指针;关于价值的书写?,c,C,我试图从用户那里获取5个字符串,并将该字符串存储到一个char字符串数组中,但是,当我尝试使用该程序时,该程序的输出总是相同的,用户输入的最后一个值 请参阅我的代码: #include <stdio.h> int main() { int i = 0; char *s[50]; char str[50]; for(i=0;i<5;i++) { fgets(str, 50, stdin); s[i] =
#include <stdio.h>
int main()
{
int i = 0;
char *s[50];
char str[50];
for(i=0;i<5;i++)
{
fgets(str, 50, stdin);
s[i] = str;
}
for(i=0;i<5;i++)
printf("%s\n ", s[i]);
}
#包括
int main()
{
int i=0;
char*s[50];
char-str[50];
对于(i=0;i您需要使用strcpy而不是简单赋值
str是一个内存位置,s[i]=str所做的一切都指向同一个缓冲区,该缓冲区在每次调用fgets时都会被覆盖
以下内容将满足您的需求:
#include <stdio.h>
int main()
{
int i = 0;
char s[5][50];
char str[50];
for(i=0;i<5;i++)
{
fgets(str, 50, stdin);
strcpy(s[i],str);
}
for(i=0;i<5;i++)
printf("%s\n ", s[i]);
}
#包括
int main()
{
int i=0;
chars[5][50];
char-str[50];
for(i=0;i所有s
的指针都指向str
。因此只存储最后一个输入
做:
最后释放()s
中的指针:
for(i=0;i<5;i++)
{
free(s[i]);
}
char *str;
for(i=0;i<5;i++)
{
str = malloc(50);
fgets(str,50,stdin);
s[i] = str;
}
for(i=0;i您正在使用以下行创建单个字符数组
char str[50];
然后数组s
中的每个指针都指向同一个内存位置。每次调用fgets时,都会覆盖存储在该内存中的字符串,因此当您打印出s
数组中的每个字符串时,都会得到相同的结果:用户输入的最后一个值,即store在单个本地分配的内存块中
尝试为从用户处读入的每个字符串分配一个新内存块,然后将新内存块的指针存储在s
:
for(i=0;i<5;i++)
{
free(s[i]);
}
char *str;
for(i=0;i<5;i++)
{
str = malloc(50);
fgets(str,50,stdin);
s[i] = str;
}
char*str;
对于(i=0;i请注意,char*s[50]
仅声明50个指针(而不是指向50个字符的指针!);它们需要指向某个位置,然后才能将某些内容复制到它们。二维字符数组如何:
char s[5][50];
然后读到他们与
fgets (s[i], 50, stdin);
优点:不需要弄乱strdup、malloc和free。使用strcpy(s[i],str)而不是s[i]=用参数s
和str
串strcpy是不正确的;您不想将一组字符复制到指针数组中。@Christopherbles:您不能使用strcpy()
除非有空间可以复制到……而您没有确保提供了这样的空间。此时str
和strcpy
对您没有好处;您不妨fgets(s[i],50,stdin)
。您好,很抱歉耽搁了:X…所以,有办法做到这一点,而不是使用strdup、strcopy或malloc???没有。如果您想动态分配字符串,没有其他方法。但是,您可以简单地声明一个静态数组。请参阅此处: