C中的字符串赋值

mko*_*mko 2 c string

我是C的新手.以下代码中的字符串赋值有效:

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

但是在下面不起作用,即使我给索引号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;
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Kir*_*rov 5

你不能做这个

a.name[10] = "Markson";
Run Code Online (Sandbox Code Playgroud)

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

strcpy 宣言:

char * strcpy ( char * destination, const char * source );
Run Code Online (Sandbox Code Playgroud)

所以,你需要

strcpy( a.name, "Markson" );
Run Code Online (Sandbox Code Playgroud)


小智 5

您无法分配给阵列.两个解决方案:复制字符串:

strcpy(a.name, "Markson");
Run Code Online (Sandbox Code Playgroud)

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

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

a.name = "Markson";
Run Code Online (Sandbox Code Playgroud)

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

struct {
    char *name;
}

a.name = strdup("Markson");
Run Code Online (Sandbox Code Playgroud)

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