char *とchar []

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
daiwa

char *とchar []

#1

投稿記事 by daiwa » 1年前

コード:

#include<stdio.h>

#define WORD_LEN_MAX 256 

typedef struct node{
    char word[WORD_LEN_MAX];
    int count;
    struct node *next;   
}node_t;

node_t *create_node(char *word){
    node_t *node;
    node = malloc(sizeof(node_t));
    if(node == NULL){
        printf("malloc eror\n");
    }
    node->word = *word;
    node->count = 1;

    return node;
}
node->word = *wordがVSCで「式は変更可能な左辺値である必要があります」とエラーが出ます。
やりたいことは構造体nodeのメンバwordに、関数node_t *create_nodeの引数*wordを代入したいです。
node->word = wordでも同じエラーが出ました

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: char *とchar []

#2

投稿記事 by みけCAT » 1年前

C言語での文字列のコピーは、strcpy()系の関数を用いるといいでしょう。
strncpy() 関数を用いると、バッファオーバーフローを防ぐことができます。

コード:

strncpy(node->word, word, sizeof(node->word));
node->word[WORD_LEN_MAX - 1] = '\0'; /* 必ずナル文字を入れ、文字列として使う時のバッファオーバーフローを防ぐ */
引数wordとして文字列を指しているポインタ以外 (NULL、ナル終端されていないデータへのポインタなど)
が渡される可能性がある場合、strcpy() 系の関数を使うのは不適切です。
(バッファオーバーフローや、値0x00が終端として解釈されてその先がコピーされないなどの問題が発生しうる)
この場合、コピーしたいデータの仕様に合わせた適切な処理が必要です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る