无法在C中将输入加载到矢量类型函数中

时间:2016-02-28 19:45:02

标签: c arrays vector

我在C中创建了一个包含字符的向量。关键是要求用户输入键盘并让他们一次输入一个字符,然后使用calloc将其添加到向量中。它目前不加载任何内容并在任何输入后退出。我希望能够继续添加字符,直到用户输入返回代替字符然后,程序将字符转换为字符串并附加到预设的文本。之后会打印出结果。我的问题是我的程序不会将用户输入加载到矢量数组中。最终结果应该看起来像HW4输入:123456

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 //declare a new vector structure
int arraySize =1;

char *vector(char *Array){
    arraySize++;
    void *temp=(char*) calloc(arraySize, sizeof(char));
    Array= (char*) temp;
    return Array;
}

int main(void){
    int i, m;
    int h=0;
    int index=0;
    char c;
    char *array = (char *) calloc(arraySize, sizeof(char));
    array[0] = '\0';
    char ch[]= "HW4 input: ";
    printf("\nEnter a single character to add to the string\n");
    printf("Enter one character at a time, when done press enter without any other input.\n");
    while((c=getc(stdin))!='\n'){
        array[index]=c;
        index++;
        if(index<arraySize){
            char *temp=(char*) calloc(arraySize, sizeof(char));
            memcpy(temp,array, arraySize);
            array=vector(array);
            memcpy(array, temp, arraySize);
        }
    }

    arraySize++;
    array=vector(array);
    index++;
    array[index]='\0';
    char output[arraySize+14];
    for (i=0; i<strlen(ch); i++){
        output[i]= ch[i];
    }

    for(m=i; m<strlen(output); m++){
        output[m]=array[h];
    }

    printf("\n%c\n", array[0]);
    free(array);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

在您编写的代码中

index++;
if (index<arraySize) {
...

但是在启动时arraySize == 1这样条件永远不会成立。

分配内存是一项代价高昂的操作,因此分配每个字节然后复制内容是无效的。

而是分配说100个字符然后如果用户输入更长则添加另外100个字符。最方便的方法是使用realloc。

e.g。

if (index < arraySize)
{
  char* tmp = realloc(array, arraySize + 100)
  if (tmp != NULL)
  {
    array = tmp;
    arraySize += 100;
  }
  else 
  {
    fprintf(stderr, "out of memory");
    exit(EXIT_FAILURE); 
  }
}

一旦用户完成输入以获得正确的缓冲区大小,您就可以使用正确的大小再次重新分配。