声明和初始化字符串

时间:2013-08-30 23:06:41

标签: c arrays string initialization declaration

为什么这不起作用?

#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;(没有引号)作为标准输出。

3 个答案:

答案 0 :(得分:1)

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

    strcpy(ch, "manipulation");
    

    char *ch;
    ch = "manipulation";
    
  2. 您的第二个示例是初始化,而不是赋值表达式。此表单创建一个数组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个元素。

如果我的解释出现问题,请告诉我。抱歉我的英语不好。