繁体   English   中英

如何将通过函数传递的字符串分配给结构成员? 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:错误:从'char'类型分配给'char [16]'类型时类型不兼容的错误”

请帮助我不知道我是否只是在做一些根本上错误的事情或什么。 谢谢

数组是不可分配的,因此也不能隐式地复制。

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

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

指令

   newNode -> s = *tempWord; 

尝试分配给阵列s炭(解除引用poitner *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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM