显示指针char *的指定索引

时间:2014-03-21 12:05:12

标签: c

我试图指向结构中包含的字符串中的指定字符 这是我的代码

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' 任何人都可以解释我这有什么问题, 谢谢

4 个答案:

答案 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解决此问题。