C中的字符串赋值

时间:2012-08-08 12:20:31

标签: c string

我是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 个答案:

答案 0 :(得分:5)

你不能这样做

a.name[10] = "Markson";

您需要strcpy字符串"Markson"a.name

strcpy声明:

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

所以,你需要

strcpy( a.name, "Markson" );

答案 1 :(得分:5)

您无法分配数组。两种解决方案:复制字符串:

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()分配的内存!)

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:0)

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

struct student a = {"Markson", 0};