gpt4 book ai didi

c - 在 C 中将 Char* 复制到 Char* 时遇到问题

转载 作者:行者123 更新时间:2023-11-30 15:38:15 25 4
gpt4 key购买 nike

我正在尝试运行以下程序,但是由于我缺乏良好的知识,我的程序在运行时崩溃了:

#include <stdio.h>
#include "ptref.h"

mystruct_t *FRSt = NULL;

int main(int argc, char* argv[])
{
char ct[2] = {0, 1, '\0'};
char dd[2] = {0, 1, '\0'};


populate_contents(FRSt, 2, "FRES", ct, dd);


return 0;

}

标题

/*
* ptref.h
*
*/

#ifndef PTREF_H_
#define PTREF_H_

typedef struct mystruct
{
char* ct[2]; //
char* dd[2]; // = "0\0";
char* name[]; // = "1\0";
} mystruct_t;

extern mystruct_t p;

void populate_contents(mystruct_t* mystruct_var, int arrSize, char* name[], char* dd[], char* ct[])
{
/* Initialise arrays */
int i;

i = 0;
strncpy(mystruct_var->name, name, sizeof(name));


for (i = 0; i < arrSize; i++)
{
mystruct_var->dd[i] = dd[i];
mystruct_var->ct[i] = ct[i];
}

return;
}




#endif /* PTREF_H_ */

因为我要在实时计算机中实现这一点,所以我不确定使用 malloc 是否会给我带来任何麻烦。但是,我有一种感觉,因为我没有使用 malloc 作为我的 mystruct_var 指针,所以我遇到了麻烦,或者可能是我的白痴代码。无论如何,我们将高度赞赏进一步的教育和建议。

附注我查看了其他相关帖子,但我的问题完全不同。所以,我提出了一个新问题。

最佳答案

首先,在 main() char ct[2] = {0, 1, '\0'}; 中,这个特定的数组初始化是不正确的,正如您所定义的数组大小为 2 并初始化 3 数组元素。

在函数 populate_contents(FRSt, 2, "FRES", ct, dd); 中,第三个参数是一个字符串,对应的被调用函数参数应该是一个 char 数组,如 char name[] 或 char 指针作为 char *name。它不应该像您将 name 定义为指针数组 char *name[] 那样。对于传递 ctdd 的参数也是如此,它们应该只是被调用函数中的 char 指针,因为类型是 char *

此外,从成员元素的使用情况来看,您声明的结构 mystruct_t 也是不正确的。

正如 Grijesh 所说,sizeof(name) 是您不想要的,因为 name 是一个可能是 4 或 8 字节的指针,因此请使用strlen() 获取您收到的字符串的长度。

关于c - 在 C 中将 Char* 复制到 Char* 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com