该计划有什么问题?

时间:2013-10-11 14:56:49

标签: c

我是C的新手,我在我买的一本书中遇到了一些问题。这个程序有什么问题?

int main (void)
{
char text[50]='\0';
scanf ("%s", text);

printf("%c", text[49]);
printf("%s", text);

return 0;
}

4 个答案:

答案 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;
}

这样做..