我刚刚开始学习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";
我收到错误,为什么?
答案 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”在内存中的位置。
由于不允许更改数组的地址,因此会出错。