getchar():没有'\ 0'?

时间:2017-05-19 08:24:16

标签: c scanf fgets getchar

我在大学有以下任务1.条款:

  1. 从stdin
  2. 读取一个字符
  3. 将它与您阅读的旧字符连接起来
  4. 使用realloc为另外一个字符获取空间
  5. 这样做直到你读'\ 0'
  6. 所以这是我的代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    
    char * readString(void){
        int nChar = 1;
        int cntr = 0;
        char * str = NULL;
        char z;
    
        while((z = getchar()) != '\0'){
            str = realloc(str, nChar * sizeof(char));
            *(str+cntr) = z;
            cntr++;
            nChar++;
        }
    
        return str;
    }
    
    int main(int argc, char *argv[]) {
        readString();
    }
    

    问题是我从未读过'\ 0'字符。 当我问我的教授时,他只说我也被允许使用getch,fgets和scanf从stdin中读取一个字符。

    有人可以帮忙吗?我没有任何线索。

    我现在编辑了我的代码。这是对的吗?

    char * readString(void){
        int nChar = 1;
        int cntr = 0;
        char * str = NULL;
        char z;
    
        while(1){
    
            if((z = getchar()) != '\n'){
                str = realloc(str, nChar * sizeof(char));
                *(str+cntr) = z;
                cntr++;
                nChar++;
            } else {
                str = realloc(str, nChar * sizeof(char));
                *(str+cntr) = '\0';
                break;
            }
        }
    
        return str;
    }
    

0 个答案:

没有答案