C语言中的字符串问题

时间:2011-09-27 10:18:18

标签: c string

我是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";

有谁可以解释为什么它不起作用?

5 个答案:

答案 0 :(得分:5)

这不是你在C中复制字符串的方法。试试

strcpy(Ford.model, "Focus");

或者(但 very different semantics ):

typedef structs {
  char const *model;
  int yearOfManufacture;
  int price;
} Car;

model = "Focus";

这些C常见问题解答详细解释了这个问题:

答案 1 :(得分:4)

“将值放入对象”有两种方法:

  • 初始化时,创建对象时
  • 带有赋值,在创建对象后

虽然语法相似,但它们代表不同的概念。

您可以初始化数组,但无法分配它。

还有一个特殊的构造来基于字符串文字初始化char数组

char arr[] = "foobar";
char arr[] = {'f', 'o', 'o', 'b', 'a', 'r', '\0'};
int arr[] = {1, 2, 3, 4};
// ...

但是,必须逐个元素地完成分配

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()和原型<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;
}

答案 2 :(得分:1)

此(Ford.model = "Focus")是不可能的。您必须将字符串复制到结构中的数组中,最好使用strcpy

strcpy(Ford.model, "Focus");

如果您的stdlib支持它,您还应该考虑溢出安全版本,例如strncpy

strncpy(Ford.model, "Focus", sizeof Ford.model);

至少我认为它是一个扩展功能而不是标准......我不确定。

答案 3 :(得分:0)

您无法使用=分配给字符数组,只能对其进行初始化。

写作时

char model[50] = "Focus";

这是初始化。

写作时

model = ...

这是一项任务。并且,正如我所说,不允许分配给字符数组。

您需要使用strcpy()复制到字符数组,例如strcpy(model, "Focus")

答案 4 :(得分:0)

您可以在定义期间指定字符串,但在其他任何地方您必须使用其他方法,例如strcpy()函数:

char model[50];
strcpy(model, "Focus");