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