![](/img/trans.png)
[英]How to assign string passed through a function call to a variable in 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.