有一些问题就像这个问题,但它们与我提出的具体问题并不相似.
我的问题是如何使用指针作为成员制作结构的深层副本,以及如何使用指针作为成员制作结构的SHALLOW副本.然后,仅供参考,如何使用指针成员制作结构的深层副本以及如何使用指针成员制作结构的浅表副本(不确定最后一个是否有意义).
假设我们有这个:
typedef struct Student
{
char* first_name;
char* last_name;
int grade;
long id;
} Student;
Run Code Online (Sandbox Code Playgroud)
这是我创建一个学生的通用函数(标题很难格式化):
Student* create_student(const char* first_name, const char* last_name, int grade,long id)
{
Student *newStudentp = (malloc(sizeof(Student)));
newStudentp -> last_name = (malloc((strlen(last_name) + 1) * sizeof(char)));
newStudentp -> first_name = (malloc((strlen(first_name) + 1) * sizeof(char)));
strncpy(newStudentp -> first_name, first_name, strlen(first_name) + 1);
strncpy(newStudentp -> last_name, last_name, strlen(last_name) + 1);
newStudentp -> grade = grade;
newStudentp -> id = id;
return newStudentp;
}
Run Code Online (Sandbox Code Playgroud)
我试图制作一份深刻而浅薄的副本;
int …Run Code Online (Sandbox Code Playgroud) 我是C的新手.
我知道这有多种形式的问题,但我的有点独特......我想.我有一个无符号的短指针.
6 unsigned short *pt;
7 pt = myArray[0];
Run Code Online (Sandbox Code Playgroud)
该数组声明为:const unsigned short myArray[1024]并且是一个十六进制数的数组,形式为0x0000,依此类推.
我尝试编译,它抛出这些错误:
myLib.c:7: error: data definition has no type or storage class
myLib.c:7: error: type defaults to 'int' in declaration of 'pt'
myLib.c:7: error: conflicting types for 'pt'
myLib.c:6: note: previous declaration of 'pt' was here
myLib.c:7: error: initialization makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)
什么出错的想法?
谢谢,菲尔
这是我的问题:
我编写了一个函数来检测字符串是否基于"0x ####"格式的十六进制:
int lc3_hashex(char *str)
{
int val = 0;
char *to;
to = strndup(str+2, 10);
val = sscanf(to, "%x", &val);
if (val)
{
return val;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
假设参数的格式为"0x ####",则返回后缀"0x"的十进制版本.但有没有内置的方式(或我只是监督的方式)获得十六进制数"0x4000"的整数值而不是整数值"4000"?
谢谢.