如何将通过函数传递的字符串分配给结构成员? 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);
好的,所以我正在尝试通过函数传递一个字符数组,然后将该字符字符串分配给二叉搜索树结构的成员。我的文件将被拆分,我似乎无法弄清楚我做错了什么。
这是我的插入文件
#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);