我想动态分配一个字符串数组,程序应该要求用户输入字符并将它们收集到数组的第一个字符串中,直到输入字母“q”,然后程序开始将字符添加到第二行等等。
当我打印字符存储位置时,似乎每个字符占用两个存储单元而不是一个,尽管我只增加了一次。
这是我的程序的源代码
#include <stdio.h>
void main()
{
char** txt;
char* baseAddress;
txt = (char **)malloc(5*sizeof(char*));
*txt = (char *)malloc(20*sizeof(char));
baseAddress = *txt;
while (*(*txt) != 'q')
{
(*txt)++;
scanf("%c", (*txt));
printf("%p\r\n", (*txt));
}
*txt = '\0';
printf("%p", baseAddress);
free(baseAddress);
free(txt);
}
输出是这样的
>j
>0x9e12021
>0x9e12022
>s
>0x9e12023
>0x9e12024
>
我认为指针可能有问题。 我该怎么做才能做到这一点?抱歉英语不好
最佳答案
您的代码具体做什么:
+----------------------------------------------+
| +--------------------------------------+ |
| txt|*txt |*txt+1 |*txt+2 |*txt+3 |*txt+4 | |
| +--------------------------------------+ |
| ^ ^ no memory alloc ^ |
| | |_______not used_______| |
| +----+ |
|*txt |____| <------------------------------+---you never give a value here,
| +1 |____| <--j |
| +2 |____| <-- '\n' |
| +3 |____| <--s |
| +4 |____| <-- '\n' |
| . . |
| . . |
| . ____ |
| +19 |____| |
+----------------------------------------------+
所以你需要:
- 重写你的 while 循环并处理
'\n'
- 当用户输入q时,分配新的字符串内存并收集用户输入。
建议:
在你的第一个字符串中
使用 txt[0]
而不是 *txt
,使用 txt[0][i] 和 i++
而不是 * *txt 和 (*txt)++
.
希望能有所帮助。 :-)
关于c - 递增指针时 C 错误中的 2D 动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18554757/