我遇到一些问题,将字符串数组中特定值的地址存储到指针并将其打印出来。请原谅不良变量名称,它们仅用于示例。
char **code; // code is an array of 100 strings of length 8 characters
code = malloc (100*sizeof(*code));
for (i=0; i<100; i++) {
code[i]=malloc(8*sizeof(**code));
}
char **r; // r is an array of 16 strings of 32 characters
r = malloc (16*sizeof(*r));
for (i = 0; i < 16; i++)
r[i] = malloc(32*sizeof(**r));
char *a; // a is a pointer to a string
a = (char *) &r[13]; // point a to value at r[13]
*a = (char *)&code[100]; // trying to assign the value of r[13] to the address of code[100]
printf("Code 100 Add: %p a Val: %i\n", &code[100], *sp); // trying to check values.
我正在尝试将a的值(指向r [13],因此将r [13]的值赋值)分配给代码[100]处的字符串地址的值。甚至是32个字符的字符串是最好的方法吗?
感谢任何帮助, 加雷
答案 0 :(得分:3)
a = (char *) &r[13]; // point a to value at r[13]
打开编译器警告,并注意删除此强制转换时编译器告诉您的内容。你不应该在这段代码中使用任何强制转换。
r
的类型为char**
,因此r[13]
的类型为char*
,&r[13]
的类型为char**
,您要分配给char*
。
P.s。,下次还请包括您收到的实际错误与您的预期。
答案 1 :(得分:0)
要分配字符串,请使用strncpy
。不要直接复制指针值,因为以后会以这种方式释放它两次(以及其他问题)。
答案 2 :(得分:0)
&r[13]
不是指向char的指针。
你只需要
r[13] = code[100]
我同意Frederik的意见,在free()
分配内存时应该小心,因为现在有两个指针指向同一个内存块。如果您愿意遵循他的建议,请尝试以下方法:
strncpy(r[13], code[100], 8)
答案 3 :(得分:0)
您不想指定指向内存地址的指针,而是希望使用strcpy复制该内存地址的数据。
答案 4 :(得分:0)
根据char *a;
的定义,作业左侧的*a
成为char
类型的lvalue。你可以 将指针值指定为整数,就像在方形挂钩中指向圆孔一样,尽管它没有多大意义。要复制字符串,请使用str[nl]cpy(3)
。
答案 5 :(得分:0)
我讨厌在别人的问题中问一个问题......但是char数组setup / malloc调用不应该更像这样吗?是不是他用sizeof(**代码)分配了太多?然后......如果它是8个字符......我们不想让9为'\ 0'腾出空间吗?
char **code; // code is an array of 100 strings of length 8 characters
code = (char**) malloc (100*sizeof(char*));
for (i=0; i<100; i++) {
code[i] = (char*)malloc(9*sizeof(char));
}