将字符串写入初始化的空白字符数组

时间:2014-11-03 13:02:33

标签: c

我刚刚开始学习C而且我对如何将字符串写入C中的简单char数组感到困惑。我理解C没有字符串数据类型,并且我读到大多数网站在其中一个中声明字符串这样

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char greeting[] = "Hello";

然而如果我初始化了一个

的char数组怎么办?
char greeting[50];

我尝试给它一个字符串值。

char greeting[50];
greeting = "Zack";

我收到错误,为什么?

5 个答案:

答案 0 :(得分:2)

strcpy旨在复制"字符串"。 使用方法如下:

char greeting[50];
strcpy(greeting, "Zack");

如果目的地不够大,请注意潜在的超支。

答案 1 :(得分:2)

使用标头strcpy中声明的标准函数<string.h>来复制字符数组中的字符串

#include <string.h>

//...

char greeting[50];
strcpy( greeting, "Zack" );

标头<string.h>中声明的其他函数也可用于复制字符数组中的字符串。例如

memcpy
strncpy
strcat
strncat

使用strcat代替strcpy

的示例
#include <string.h>

//...

char greeting[50];

greeting[0] = '\0';
strcat( greeting, "Zack" );

数组没有赋值运算符。因此编译器会为此代码段发出错误

char greeting[50];
greeting = "Zack";

但是你可以分配字符数组。为此,您需要将一个字符数组包含在结构中并使用复合文字。例如。与数组相反,结构具有赋值结构的成员副本的赋值运算符。

#include <stdio.h>
#include <string.h>

int main(void) 
{
    struct A { char greeting[50]; } s;
    s = ( struct A) { "Zack" };

    puts( s.greeting );

    return 0;
}

输出

Zack

要编译此代码,您需要一个支持C99的编译器。

答案 2 :(得分:1)

您使用strcpy()

char greeting[50];

strcpy(greeting, "Zack");

这会将四个字符和终止零复制到greeting

请注意,它对greeting的可用空间一无所知,因此完全可能做错了。

答案 3 :(得分:1)

您收到错误是因为您基本上试图将字符串常量分配给数组。数组greeting衰减为指针,但它是char *const指针。

您需要使用strcpy复制文字。

答案 4 :(得分:1)

在C中,下面的代码将打印“foo”:

char greeting[50];
if(greeting == &greeting[0]){
    printf("foo");
}
else{
    printf("bar");
}

这是因为数组的变量( greeting )包含指向它的第一个元素的指针( greeting [0] )。

所以,如果你签名:

greeting = "Zack";

您说的是:让问候语具有文字字符串“Zack”在内存中的位置。

由于不允许更改数组的地址,因此会出错。