我想动态分配一个字符串数组,该程序应该向用户询问字符并在数组的第一个字符串中收集它们,直到输入字母'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
>
我认为指针可能有问题。 我该如何完成这项工作?抱歉英语不好
答案 0 :(得分:1)
你忘记了换行符。
例如,您可能想象您的输入是“js”。但是,由于您正在按Enter键,它实际上是“j \ ns \ n”。
因此,您一次输入两个字符,一次读取两个字符。你的代码表现得很好。
答案 1 :(得分:1)
你的代码究竟做了什么:
+----------------------------------------------+
| +--------------------------------------+ |
| 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 |____| |
+----------------------------------------------+
所以你需要:
'\n'
Suggust:
在你的fisrt字符串中
使用txt[0]
代替*txt
,使用txt[0][i] and i++
代替**txt and (*txt)++
。
希望可以提供帮助。 : - )