【发布时间】:2012-01-09 04:05:41
【问题描述】:
我试图保留一个动态分配的字符串数组,这些字符串是使用 c 中的 read 系统调用读取的。这是我正在尝试做的一个小样本:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void processInput() {
char ** array = (char **) calloc(20, sizeof(char*));
int arrayIndex = 0;
while(1) {
printf("Type something: ");
fflush(stdout);
char* buffer;
int readResult = read(0, buffer, 100);
array[arrayIndex] = (char*)calloc(readResult, sizeof(char));
}
}
但是,这会导致一些奇怪的问题:
输入一些东西:a 输入一些东西:输入一些东西:a 输入一些东西:输入一些东西:abcdefg 输入某事:输入某事:输入某事:输入某事:输入某事:输入某事:输入某事:输入某事:对此有什么解释吗?我似乎无法弄清楚为什么会这样。
【问题讨论】:
-
char* buffer; readResult = read(0, buffer, 100);使用未初始化的变量——尤其是未初始化的指针——只能以泪水收场。 -
你没有增加
arrayIndex -
对不起,这个例子有点草率。你说得对,我没有增加arrayIndex,但这对这个例子并不重要。但是,实际上您 100% 正确地认为需要增加 arrayIndex。否则,除了索引 0 中最后添加的项目之外,它不会存储任何内容:P。
-
为什么要删除代码?问题现在无法回答,可能会被关闭...
-
我已经回滚到带有代码的修订版。 Ryan:请不要破坏你的问题。一旦有了答案,您就有责任将问题留在与答案相关的表格中。如果您需要修改问题,请务必编辑它,但保留原始材料可见。
标签: c dynamic-memory-allocation system-calls