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

配列に割り当てることはできません。2 つの解決策: 文字列をコピーします。

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 に答える