0

我对 C 语言非常陌生,并且正在做一些我在买的书中发现的问题。这个程序有什么问题?

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

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

return 0;
}
4

4 回答 4

8
char text[50]='\0';

无效。您可以跳过初始化text并声明它

char text[50];

或者你可以初始化它的第一个元素

char text[50]={'\0'};

您还缺少一个包含,stdio.h并且应该真正检查您的scanf调用是否读取了一个字符串,并可以给它一个字符串的最大长度

if (scanf("%49s", text) == 1)
于 2013-10-11T15:00:12.133 回答
3

你想摆脱:

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

char因为如果字符串的长度小于 49秒,您将不知道该内存位置的内容。

于 2013-10-11T14:58:25.033 回答
2

C中的单引号和双引号是有区别的。

  • 双引号表示字符串
  • 单引号表示字符

第 3 行将无法编译,因为编译器希望您将字符串分配给字符数组。

你可以做

char text[50]="\0";

这实际上用零填充了所有 50 个字节。

你也可以做

char text[50]="bla";

它用“bla”填充前 3 个字节,其余字节用零填充。至少我的编译器是这样做的。

您也可以什么都不做,因为无论如何您都只是在下一条语句中用用户输入填充它。

char text[50];
scanf ("%s", text);

但是你有一个问题。因为如果用户输入的字符串少于 49 个字符,下一条语句将为您提供随机输出。但是如果你初始化,那么你输出零字节,这也没什么用。

然而,重点是学习 C 在处理字符数组时的不同行为。

于 2013-10-11T15:19:24.963 回答
1
int main ()
{
char text[50]={'1','2','3','4'};
printf("%c", text[1]);
printf("%c",text[0]);
getch();
return 0;
}

这样做..

于 2013-10-11T15:12:35.947 回答