3

我是 C 新手。以下代码中的字符串分配有效:

#include<stdio.h>
int main(void){
  char str[] = "string";
  printf("%s\n",str);
}

但在以下情况下不起作用,即使我将索引号提供给name[]

#include <stdio.h>
int main(void){
  struct student {
    char name[10];
    int  salary;
  };
  struct student a;
  a.name[10] = "Markson";
  a.salary = 100;
  printf("the name is %s\n",a.name);
  return 0;
}

为什么会这样?

4

4 回答 4

6

你不可以做这个

a.name[10] = "Markson";

您需要strcpy将字符串"Markson"转换为a.name.

strcpy宣言:

char * strcpy ( char * destination, const char * source );

所以,你需要

strcpy( a.name, "Markson" );
于 2012-08-08T12:21:29.370 回答
6

您不能分配给数组。两种解决方案:要么复制字符串:

strcpy(a.name, "Markson");

或使用 const char 指针而不是数组,然后您可以简单地分配它:

struct {
    const char *name;
    /* etc. */
};

a.name = "Markson";

或者,如果您希望稍后修改“name”的内容,请使用非 const char 指针:

struct {
    char *name;
}

a.name = strdup("Markson");

(不要忘记在后一种情况下释放 strdup() 分配的内存!)

于 2012-08-08T12:24:01.257 回答
3

char str[] = "string";是一个声明,您可以在其中为字符串赋予初始值。

name[10]标识字符串中的单个字符,因此您可以为其分配单个字符,但不能分配字符串。

在声明之外没有简单的 C 风格字符串赋值。你需要使用strcpy它。

于 2012-08-08T12:24:57.560 回答
0

因为在一种情况下,您在声明中分配它,而在另一种情况下,您不是。如果你想做等效的写:

struct student a = {"Markson", 0};
于 2012-08-08T12:33:35.327 回答