我试图指向结构中包含的字符串中的指定字符 这是我的代码
typedef struct{
char *name;
int age;
}PERSON, *person;
int main(){
person serenity;
serenity = (person)malloc(sizeof(PERSON));
strcpy(&(serenity->name),"Serenity");
printf("%c",*(&(serenity->name)+1));
}
这里我想显示第二个字符'e',但它显示'n' 任何人都可以解释我这有什么问题, 谢谢
答案 0 :(得分:1)
本声明
serenity = (person)malloc(sizeof(PERSON));
分配结构
typedef struct{
char *name;
int age;
}PERSON
然而,名称保持未初始化并指向内存中的某处,导致复制时崩溃。
所以而不是
strcpy(&(serenity->name),"Serenity");
写
serenity->name = strdup("Serenity");
与
相同serenity->name = malloc(strlen("Serenity")+1);
strcpy(serenity->name,"Serenity");
不要忘记在以后释放该字符串。
答案 1 :(得分:1)
您尚未为name
typedef struct{
char *name;
int age;
}PERSON, *person;
int main(){
person serenity;
serenity = malloc(sizeof(PERSON));
serenity->name = malloc(sizeof("Serenity")); //<< Missing
strcpy((serenity->name),"Serenity");
printf("%c",*((serenity->name)+1)); // << Also you want the value in pointer name NOT its address
return 0;
}
输出e
。此外,由于您标记了C
,因此无需强制转换malloc的返回类型。
答案 2 :(得分:1)
好的,好的...除了所有这些答案之外,如果您不打算将来更改字符串"Serenity"
中的字符,您可以执行以下操作:
#include <stdio.h>
typedef struct{
const char *name; // <-- added const
int age;
}PERSON, *person;
int main( ){
person serenity;
serenity = (person) malloc( sizeof( PERSON ) );
serenity->name = "Serenity"; // <-- simply assigned the pointer with the
// address to the array of constant characters
printf( "%c", *( serenity->name + 1 ) ); // <-- changed this
}
答案 3 :(得分:0)
尝试printf("%c",*(serenity->name+1));
,同时执行strcpy(serenity->name,"Serenity");
。
如果您有一个指针char* name;
,则可以通过执行name[1]
或*(name+1)
来访问第二个元素。 &name
将为您提供存储name
指针地址的地址。这不是你想要的。
您的程序中的另一个问题是您永远不会为变量name
分配内存。你需要一个serenity->name = (char*)malloc(128);
。但是使用像128这样的任意长度与strcpy
结合使用是非常危险的。使用strncpy
代替strcpy
解决此问题。