分配中的类型不兼容,为什么我不能这样做?

时间:2012-10-20 01:59:51

标签: c arrays pointers struct char

我有一个结构The_Word,它有一个变量char字[WORD_LENGTH]

我有以下

typedef struct The_Word
{
    char word[WORD_LENGTH];
    int frequency;
    struct The_Word* next;
} The_Word;

int someFunc(char* word)
{
/*Rest of method excluded*/

struct The_Word *newWord = malloc(sizeof(struct The_Word));

newWord->word = word; // error here. How can I assign the struct's word to the pointer word
}

3 个答案:

答案 0 :(得分:1)

您需要使用strncpy复制字符串:

#include <string.h>

int someFunc(char* word)
{
  /*Rest of method excluded*/

  struct The_Word *newWord = malloc(sizeof(struct The_Word));
  strncpy(newWord->word, word, WORD_LENGTH);
  newWord->word[WORD_LENGTH - 1] = '\0';
}

您应该小心检查字符串是否适合数组。就是这样,当参数char* word的长度超过WORD_LENGTH时。

答案 1 :(得分:0)

您不直接指定指针。相反,您应该使用strncpy()函数。

strncpy(newWord->word,word,strlen(word));

strcpy()memcpy()所有工作都类似。

typedef struct The_Word
{
    char word[WORD_LENGTH];
    int frequency;
    struct The_Word* next;
} The_Word;

int someFunc(char* word)
{
/*Rest of method excluded*/

  struct The_Word *newWord = malloc(sizeof(struct The_Word));
  memset(newWord->word,0,WORD_LENGTH);
  strcpy(newWord->word,word);
  /*return something*/
}

答案 2 :(得分:0)

这会产生不兼容的类型错误,因为C数组被视为常量指针。数组和指针并不完全相同。虽然它们在大多数其他情况下的行为相同,但您无法重新指定数组指向的内容。

看起来您打算将函数参数中的字符串复制到新分配的结构中。如果是这种情况,请使用其他人建议的strncpy()或memcpy()。