递增指针时C错误中的2D动态分配

时间:2013-09-01 02:53:35

标签: c pointers dynamic-allocation

我想动态分配一个字符串数组,该程序应该向用户询问字符并在数组的第一个字符串中收集它们,直到输入字母'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
>

我认为指针可能有问题。 我该如何完成这项工作?抱歉英语不好

2 个答案:

答案 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 |____|                                   |
+----------------------------------------------+

所以你需要:

  1. 在循环时重写你并处理'\n'
  2. 当用户输入 q 时,分配新的字符串内存并收集用户输入。
  3. Suggust:

    在你的fisrt字符串中

    使用txt[0]代替*txt,使用txt[0][i] and i++代替**txt and (*txt)++

    希望可以提供帮助。 : - )