char数组不能正常工作(C编程)

时间:2017-09-13 10:04:03

标签: c

#define OK 0
#define MAXSTRING 200
#define NUMBER 10
#define MALLOC_ERROR 2

int main(int argc, char** argv) {

    char **B = (char**)malloc(sizeof(char*)*NUMBER);
    char buffer[MAXSTRING];
    int i, strings = 0, arraysize = NUMBER;

    if (( B = ( char**)malloc(sizeof(char*)*NUMBER))==NULL) {
        printf("initial malloc error\n");
        fflush(stdout);
        exit(MALLOC_ERROR);
    }

    for(int i = 0; i< NUMBER; i++) {
        B[i] = (char*)malloc(sizeof(char)*MAXSTRING);
    }
    while((fgets(buffer,MAXSTRING,stdin))!=NULL) {
        /*
            if(strings+1>arraysize)
            {
                arraysize = 2*arraysize;
                B=realloc(B,(arraysize)*sizeof(char*));
            }
        */
        buffer[strlen(buffer)-1]='\0';
        B[strings] = buffer;
        printf("%s \n", buffer);
        strings++;
    }


    printf("Read %d strings:\n", strings);
    for (i = 0; i<strings ; i++) {
      printf("\t%s\t %d\n", B[i], (int)strlen(B[i]));
    }
    return 0;
}

当我试图从循环中打印B [i]时,它只输出stdin的所有位置的最后一个输入。我尝试使用普通for循环进行测试,但它不知何故有效,但我不知道问题的原因。谢谢您的帮助!!例如,我把“长颈鹿”作为第一个输入,另一个输入“吃”,最后输入“离开”,B [i]的循环只输出“叶子”

1 个答案:

答案 0 :(得分:1)

执行B[string] = buffer时,如果不复制字符串,只需复制指针,则应使用strcpy()

假设您的字符串始终\0已终止,那么类似的内容应该有效strcpy(B[i], buffer);