C 指向字符宽度typedef的指针数组

C 指向字符宽度typedef的指针数组,c,pointers,char,malloc,typedef,C,Pointers,Char,Malloc,Typedef,我试图创建一个指向char的指针数组。 我决定使用typedef定义,但我不知道我做错了什么 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); s

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

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]));
  /*
/行得通/

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

printf(“%c”,*(taa->a[1]+1))
就是这样…

试试:

strcpy((taa->a[1]), "Peter");
还要注意,
[1]
正在访问数组中的第二个元素;第一次使用
[0]
。另外,最好使用
strncpy
或某种“安全”的方法,将字符缓冲区(字符串)的长度传递到其中,以防止在内存中涂鸦

编辑:

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


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

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

那么,你得到了什么错误,在什么代码行上?虽然C++有<代码> > *>代码>操作符,但我认为它在C中是可用的,至少在我的编译器上,如果这是C(标记),@ USER 2533527,你使用什么编译器?因为我不同意你说的。。。它在C++中是可用的,但是也有不同的用法。<代码>C@user4815162342:
strcpy_s()
是C11-ISO/IEC 9899:2011(附录K,规范性附录)的可选部分。然而,它唯一可用的平台是带有MSVC的Microsoft Windows。我认为它只适用于
gets()
函数@Nonsesickle:什么“只适用于
gets()
函数”?@JonathanLeffler指出。已更改为strncpy!!你的意思是除了C中的非法语法之外,taa->*a[1]等于ta.**(a+i)i thing。。。减量有三个级别。@Nonsesickle,我记得,抱怨
->*
,但是
*taa->a[i]
是可以的@XosLamoo我想不出关于这个主题的
***(a+I)
是什么。@FredrickGauss你是对的。对不起,我好像忘了礼貌。我一直在说,如果没有提供替代方案,它就不是C。是的,您应该使用
*taa->a[i]
来取消对
a[i]
的引用。
->
运算符的优先级高于
*
,因此它相当于
*(taa->a[i])
,这是我认为需要的。C++中使用 > -> */Cux>运算符作为成员函数指针。本文将举例说明C++中使用的<代码> -> *>代码>操作符。我打算使用<代码> *TAA> > [i] <代码>去引用<代码> [i] [0 ] < />代码> <代码> TAA> > [i](0)< />代码>单<代码> char < /C> Access Access。但是对于这个问题,它是字符数组的地址,所以很简单
taa->a[i]
printf("%c",*taa->a[1]);  It dereference 'P' character, how i can get acces to 'e'?
strcpy((taa->a[1]), "Peter");
strcpy((taa->a[1]), "Peter");