指向char width typedef的指针数组

时间:2013-11-13 20:15:01

标签: c pointers char malloc typedef

我正在尝试创建一个指向char的指针数组。 我决定使用typedef definicion,但我不知道我做错了什么......

typedef struct _pp{
    char* a[10];
    int b;
}pp;

int main(){
  pp *taa = (pp* )malloc(sizeof(pp));
  taa->b = 2;
  printf("%d\n", taa->b);
  taa->a[1]=(char* )malloc(strlen("Peter")+1);
  strcpy((taa->*a[1]), "Peter");

  printf("%s\n", taa->*(a[1]));
  /*

/ 有效 /

  int i;  
  int* a[5];
  for(i=0;i<5;i++){
    a[i]=(int* )malloc(sizeof(int));
    **(a+i)=i+100;
    printf("%d\n", **(a+i));
  */}

EDITED

这是好的做法吗?

  for(i=0;i<10;i++){
    taa->a[i]=(char* )malloc(strlen("Peter")+1);
    strncpy((taa->a[i]), "Peter", strlen("Peter"));
  }
  for(i=0;i<10;i++){
    printf("%s\n", taa->a[i]);
  }

问题3)taa->*a[1]相当于ta.***(a + i)

printf("%c",*taa->a[1]);  It dereference 'P' character, how i can get acces to 'e'?

printf("%c",*(taa->a[1]+0));

printf("%c",*(taa->a[1]+1)); 这就是......

2 个答案:

答案 0 :(得分:1)

尝试:

strcpy((taa->a[1]), "Peter");

另请注意[1]正在访问数组中的第二个元素;首先使用[0]。最好使用strncpy或者你传递char缓冲区(字符串)长度的“安全”来阻止内存被抄写是好的。

修改

非标准的安全字符串函数:

strlcpy

strcpy_s

答案 1 :(得分:0)

strcpy函数需要第一个参数的char*类型。 在您的pp struct中,您有十char*秒。您使用char*访问了第二个taa->a[1]。因此,在*之后移除->会为您提供所需内容。 这很好用:

strcpy((taa->a[1]), "Peter");