2

为什么这不起作用?

#include<stdio.h>
int main()
{
char ch[50];
ch[50]="manipulation";
puts(ch);
}

为什么这行得通?

#include<stdio.h>
int main()
{
char ch[50]="manipulation";
puts(ch);
}

通过“它有效”,我的意思是我得到了我想要的输出,即打印“操作”(不带引号)作为标准输出。

4

3 回答 3

1
  1. ch[50] = "manipulation"不是有效的语法。更接近ch = "manipulation",但数组不是可修改的左值,因此您不能分配给它们。使用strcpy(3), 或声明ch为指针:

    strcpy(ch, "manipulation");
    

    或者

    char *ch;
    ch = "manipulation";
    
  2. 您的第二个示例是初始化,而不是赋值表达式。此表单创建一个数组ch并复制提供的字符串文字以对其进行初始化。

于 2013-08-30T23:07:58.770 回答
1

您不能分配裸 C 数组,这就是原因。第二种情况根本不是赋值,而是初始化。

如果您确实想分配数组,可以通过将它们包装在结构中来实现:

struct Char50 { char data[50]; };

struct Char50 x;
struct Char50 y = { "abcde" };
x = y;
puts(x.data);

但是,处理字符串的更惯用的方法是strcpy,例如strcpy(ch, "abcde");,尽管您必须注意目标缓冲区的大小。

于 2013-08-30T23:11:17.777 回答
1

它不起作用,因为使用以下语法:

ch[50]="manipulation";

您将字符串“manipulation”分配给 ch 的第 50 个元素。这是不可能的,因为数组由单个字符组成,并且您正在将字符串分配给单个字符。此外,ch 有从 0 到 49 的元素,并且没有第 50 个元素。

如果我的解释有问题,请告诉我。对不起我的英语不好。

于 2013-08-30T23:29:06.923 回答