我对 C 语言非常陌生,并且正在做一些我在买的书中发现的问题。这个程序有什么问题?
int main (void)
{
char text[50]='\0';
scanf ("%s", text);
printf("%c", text[49]);
printf("%s", text);
return 0;
}
我对 C 语言非常陌生,并且正在做一些我在买的书中发现的问题。这个程序有什么问题?
int main (void)
{
char text[50]='\0';
scanf ("%s", text);
printf("%c", text[49]);
printf("%s", text);
return 0;
}
char text[50]='\0';
无效。您可以跳过初始化text
并声明它
char text[50];
或者你可以初始化它的第一个元素
char text[50]={'\0'};
您还缺少一个包含,stdio.h
并且应该真正检查您的scanf
调用是否读取了一个字符串,并可以给它一个字符串的最大长度
if (scanf("%49s", text) == 1)
你想摆脱:
printf("%c", text[49]);
char
因为如果字符串的长度小于 49秒,您将不知道该内存位置的内容。
C中的单引号和双引号是有区别的。
第 3 行将无法编译,因为编译器希望您将字符串分配给字符数组。
你可以做
char text[50]="\0";
这实际上用零填充了所有 50 个字节。
你也可以做
char text[50]="bla";
它用“bla”填充前 3 个字节,其余字节用零填充。至少我的编译器是这样做的。
您也可以什么都不做,因为无论如何您都只是在下一条语句中用用户输入填充它。
char text[50];
scanf ("%s", text);
但是你有一个问题。因为如果用户输入的字符串少于 49 个字符,下一条语句将为您提供随机输出。但是如果你初始化,那么你输出零字节,这也没什么用。
然而,重点是学习 C 在处理字符数组时的不同行为。
int main ()
{
char text[50]={'1','2','3','4'};
printf("%c", text[1]);
printf("%c",text[0]);
getch();
return 0;
}
这样做..