如何将通过函数传递的字符串分配给结构成员? C编程

How to assign a string passed through a function to a structure member? C programming

好的,所以我正在尝试通过函数传递一个字符数组,然后将该字符字符串分配给二叉搜索树结构的成员。我的文件将被拆分,我似乎无法弄清楚我做错了什么。

这是我的插入文件

#include <stdio.h>
#include <stdlib.h>
#include "struct_def.h"
#define MAXLEN 15

treeNode * insert(treeNode *nodeptr, char * tempWord){

  if(nodeptr == NULL){
   treeNode *newNode;
   newNode = (treeNode *)malloc(sizeof(treeNode));
   newNode -> s = *tempWord;
  }

}

这是我的 struct_def.h 文件

#define MAXLEN 15

typedef struct treeNode{
  struct treeNode *right;
  struct treeNode *left;
  char s[MAXLEN+1] ;
}treeNode;

我不断收到类似 "insert.c:11:17: error: incompatible types when assigning to type 'char[16]' from type 'char'"

的错误

请帮助我,我不知道我是在做一些根本性的错误还是什么。谢谢

数组不可赋值,因此也不可隐式复制。

即使它们是,newNode -> s = *tempWord 也会尝试将单个 char 分配给数组。

您将不得不使用 strncpy(或 memcpy)复制数组元素。

指令

   newNode -> s = *tempWord; 

尝试向数组 s 分配一个字符(取消引用指针 *tempWord)。

将其更改为:

   strncpy (newNode -> s, tempWord, MAXLEN+1]);

可能这会有所帮助:

strncpy(newNode->s, tempWord, sizeof(newNode->s));

如果您的平台支持 strlcpy,您也可以使用它。

您可能在想,具有字符串成员的结构通常是这样声明的:

typedef struct treeNode {
    struct treeNode *right, *left;
    char *s;
} treeNode;

在这种情况下,可以将指针值赋给s

newNode->s = tempWord;

(请注意您的原始代码甚至试图取消引用 tempWord,这是一件坏事)。这允许它们仅指向分配在其他地方的字符串,从而节省内存。

但是在你的结构中:

typedef struct treeNode{
  struct treeNode *right;
  struct treeNode *left;
  char s[MAXLEN+1] ;  
}treeNode;

成员s是一个实际的MAXLEN+1字节数组,不是指针。所以要给它赋值,你必须复制字符串,而不仅仅是赋值指针地址:

strncpy(newNode->s, tempWord, MAXLEN+1);