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

问题描述:

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

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

但是如果我有初始化

char greeting[50]; 

一个字符数组声明字符串,我尝试给它一个字符串值。

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

我给了一个错误,为什么?

+0

在C中,数组是一个const引用。你不能改变它们。 – KodingKid 2014-11-03 13:07:11

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

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

注意潜在的超支如果目标不够大。

您使用strcpy()

char greeting[50]; 

strcpy(greeting, "Zack"); 

这四个大字,并终止零到greeting复制。

请注意,它对greeting的可用空间一无所知,所以完全可以做错误的事情。

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

您需要使用strcpy来复制文字。

使用标准功能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编译器。

在C中,如下因素代码将打印“foo”的:

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

这是因为该阵列的(问候)可变包含一个指向它的第一个元素(问候[0 ])。

所以,如果你ASIGN:你是说

greeting = "Zack"; 

:让问候有其中的文本字符串“扎克”是在内存中的地址。

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

+0

这就是为什么你必须遵循@doctorlove答案才能完成这项任务 – user3204469 2014-11-03 13:18:21

+0

@ user3204469数组包含指向其第一个元素的指针是错误的。 – 2014-11-03 13:33:27

+0

@Baldrickk,我明白这个问题是:“为什么这个陈述是错误的?”不是“如何将字符串复制到数组?”。对不起,我的误解。 – user3204469 2014-11-03 13:58:34