将字符串的地址存储在字符串数组中

时间:2011-04-27 17:21:47

标签: c

我遇到一些问题,将字符串数组中特定值的地址存储到指针并将其打印出来。请原谅不良变量名称,它们仅用于示例。

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个字符的字符串是最好的方法吗?

感谢任何帮助, 加雷

6 个答案:

答案 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));
}