我遇到以下问题,我无法弄清楚如何将名为 funcName
的 char*
分配给名为 char*
名称
。需要一些帮助,谢谢。
#define MAX_PARMS 5
typedef enum {C_INT, C_SHORT, C_CHAR, C_FLOAT, C_INT_PTR} DataType;
typedef struct {
char name;
int *value;
DataType dType;
} VarType;
typedef struct {
char *funcName;
VarType parms[MAX_PARMS];
int numParms;
} FrameType;
void enterSumFunc (StackType *stkPtr, char *fname, int num, int *arr, int *sum) {
FrameType *temp;
//temp->funcName = fname;
strcpy(temp->funcName, fname);
}
如您所见,我已经尝试了 strcpy
和手动设置 char*
但没有任何效果;两者都给出了段错误。任何帮助都会有用,谢谢。
最佳答案
FrameType *temp;
temp->funcName ...
取消引用未初始化的指针,这会产生未定义的行为,在这种情况下,您可以将其视为段错误。一种可能的解决方案是使用具有自动存储持续时间的对象而不是指针:
FrameType temp;
temp.funcName ...
还要注意
temp->funcName = fname;
将指针 fname
的值(即它指向的地址)赋给指针 funcName
,不执行复制,一旦与 fname 关联的内存
被释放,这个 temp->funcName
将是一个无效的(悬挂的)指针,使用它也会导致未定义的行为。
另一方面:
strcpy(temp->funcName, fname);
尝试将存储在 fname
中的以 null 结尾的字符串复制到 funcName
中,如果字符串不是以 null 结尾或没有与该指针关联的内存,它将也会导致未定义的行为。
注意:
typedef struct {
char *funcName;
VarType parms[MAX_PARMS];
int numParms;
} FrameType;
只声明了一个指针 funcName
所以你应该在试图复制一个字符串之前使用 malloc
显式地分配一个内存,或者更好的是,使用一个带有 automatic 的缓冲区存储时间改为:
typedef struct {
char funcName[255];
VarType parms[MAX_PARMS];
int numParms;
} FrameType;
关于c - 如何将 char* 设置为 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647848/