为什么这不起作用?
#include<stdio.h>
int main()
{
char ch[50];
ch[50]="manipulation";
puts(ch);
}
为什么这样做?
#include<stdio.h>
int main()
{
char ch[50]="manipulation";
puts(ch);
}
通过&#34;它起作用&#34;我的意思是我得到我想要的输出,即打印&#34;操作&#34;(没有引号)作为标准输出。
答案 0 :(得分:1)
ch[50] = "manipulation"
是无效的语法。更接近的是ch = "manipulation"
,但数组不是可修改的左值,因此您无法分配它们。使用strcpy(3)
,或将ch
声明为指针:
strcpy(ch, "manipulation");
或
char *ch;
ch = "manipulation";
您的第二个示例是初始化,而不是赋值表达式。此表单创建一个数组ch
并复制提供的字符串文字以初始化它。
答案 1 :(得分:1)
你不能分配裸C数组,这就是原因。第二种情况根本不是分配,而是初始化。
如果您确实要分配数组,可以通过将它们包装在结构中来实现:
struct Char50 { char data[50]; };
struct Char50 x;
struct Char50 y = { "abcde" };
x = y;
puts(x.data);
处理字符串的更惯用的方法是strcpy
,例如strcpy(ch, "abcde");
,但您必须小心目标缓冲区大小。
答案 2 :(得分:1)
它没有用,因为语法为:
ch[50]="manipulation";
您正在分配字符串&#34;操作&#34;到了ch的第50个元素。 这是不可能的,因为数组由个别字符组成,并且您将字符串分配给单个字符。此外,ch具有从0到49的元素,并且不是第50个元素。
如果我的解释出现问题,请告诉我。抱歉我的英语不好。