2012-11-23 23 views
0

好吧,我知道malloccalloc可用于动态分配,但作为一个新CI不知道如何使用我输入多个输入,比如例如TC中分配的内存++中,我们有这样的代码使用malloc()进行多输入?

#include <stdio.h> 
#include <string.h> 
#include <alloc.h> 
#include <process.h> 

int main(void) 
{ 
    char *str; 

    /* allocate memory for string */ 
    if ((str = (char *) malloc(10)) == NULL) 
    { 
     printf("Not enough memory to allocate buffer\n"); 
     exit(1); /* terminate program if out of memory */ 
    } 

    /* copy "Hello" into string */ 
    strcpy(str, "Hello"); 
    /* display string */ 
    printf("String is %s\n", str); 
    /* free memory */ 
    free(str); 

    return 0; 
} 

在这样的代码中,我们将Hello放在我们现在分配的内存中,应该给我们留下更多4个字符空间,我们应该将这些空间添加到这些空间中。

当用户被问及输入的数量,他说10或100时,我想实现这个想法,然后程序输入数据并存储它们并将数据打印到屏幕上。

+0

所以你要根据用户输入分配的大小? –

+0

您可能缺少'#include '指令。如果你想部分填充一些'malloc'-ed或'calloc' -ed动态分配的堆区,你可能需要做一些家务管理,例如,与当前和结束索引或指针。你可能想用'getline'来完全读取一个'malloc'-ed行。 –

+0

在C中,不需要将调用结果强制转换为'malloc()'/'calloc()'。也不建议这样做,因为这可能会隐藏错误,因为在您的示例中很可能是这种情况(请参阅* Basile *的注释)。 – alk

回答

0

如果要附加到malloc编辑字符串,请使用strcat

str = malloc(20); 
... 
/* copy "Hello" into string */ 
strcpy(str, "Hello"); 
strcat(str, ", world!"); 
/* display string */ 
printf("String is %s\n", str); /* will print 'Hello, world!' */ 
1

您正在寻找“指针算术”。
在你的例子中,你正在分配10个字节的内存,并将第一个字节的地址存储在指针str中。
然后,将字符串"hello"复制到此内存,这会留下您可以使用的4个字节(因为"hello"是5个字节+字符串终止字符\0的一个字节)。
如果你想在剩下的4个字节中存储一些东西,你可以用指针算术来计算内存地址。 例如,如果要访问str中的第6个字节,那么可以执行str+5。简单。
因此,延长你的榜样,你可以这样做:

strcpy(str, "Hello"); 
strcpy(str+5, " man"); 

printf("String is %s\n", str);输出将"Hello man"

+0

谢谢你清除了我的概念 – DevX