麻烦在C
字符串我用C世界的新手,我有两个可能愚蠢的问题。麻烦在C
我读有关C结构和这里是我卡住了。假设我们有这样的结构
typedef structs {
char model[50];
int yearOfManufacture;
int price;
} Car;
Car Ford;
Ford.yearOfManufacture = 1997;
Ford.price = 3000;
//The line below gives me an error "Array type char[50] is not assignable
Ford.model = "Focus"
如何在这种情况下将文本传递到Ford.model?
我的第二个问题也是关于字符串。 此代码工作正常
char model[50] = "Focus";
printf("Model is %s", model);
但是这一次不
char model[50];
model = "Focus";
任何人都可以解释为什么它不工作?
那不是你如何复制字符串C.尝试
strcpy(Ford.model, "Focus");
或者(但very different semantics):
typedef structs {
char const *model;
int yearOfManufacture;
int price;
} Car;
model = "Focus";
使用这些C常见问题解释一下这个问题:
您不能分配给=
的字符数组,只能初始化它。
当你写
char model[50] = "Focus";
这是一个初始化。
当你写
model = ...
这是一项任务。而且,正如我所说的,不允许赋值给字符数组。
您需要使用strcpy()
(例如,)来复制字符数组。 strcpy(model, "Focus")
。
这(Ford.model = "Focus"
)是不可能的。您必须将字符串复制到在结构中的数组,最好用strcpy
:
strcpy(Ford.model, "Focus");
如果您STDLIB支持的话,你也应该考虑溢出安全的版本,如strncpy
:
strncpy(Ford.model, "Focus", sizeof Ford.model);
在至少我认为它是一个扩展功能,而不是标准...我不确定。
它是标准的,但不是每个平台都支持的C99标准。在Win32上,他们拥有它,但名为'_snprintf'或'sprintf_s' – wormsparty
您可以定义过程中指定字符串,但其他地方你必须使用不同的方法,如strcpy()
功能:
char model[50];
strcpy(model, "Focus");
您可以在* definition *期间初始化**,而不是声明。通常它们(声明和定义)同时发生,但您可以将声明与定义分开。 – pmg
有“把在对象中的值”方法有两种:
- 与初始化,创建
- 与分配对象时,将创建该对象后
虽然语法相似,但它们表示不同的概念。
您可以初始化一个数组,但不能分配给它。
也有一个特殊的结构来初始化char
阵列基于字符串文字
char arr[] = "foobar";
char arr[] = {'f', 'o', 'o', 'b', 'a', 'r', '\0'};
int arr[] = {1, 2, 3, 4};
// ...
但是,assignement必须元素
char arr[4];
arr[0] = arr[1] = arr[2] = 'X';
arr[3] = '\0';
int arr[4];
arr[0] = arr[1] = arr[2] = 42;
arr[3] = -1;
一个“特殊”的方式来分配进行元素一个char
数组一个接一个的元素与一个语句是使用库函数strcpy()
与原型PE在<string.h>
#include <string.h>
int main(void) {
char arr[10];
strcpy(arr, "foo"); // same as arr[0]='f'; arr[1]=arr[2]='o'; arr[3]='\0';
return 0;
}
+1为初学者提供更多信息! – niko
你的问题有绝对无关,与结构;这是关于字符串两次的相同问题。 –