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