C 字符与返回键不匹配\n

标签 c

我正在运行一个程序来读取 C 中的字符串。我在存储字符串时遇到了一个奇怪的问题。我的代码是:

void getarray(char *text){
  char a, *p;
  int b = 1;

  p = text;
  scanf("%c", &a);
  if(a == '\n'){
    *p = '\0';
    return;
  }

  while(a != '\n'){
    *(p+b-1) = a;
    p = realloc(p, sizeof(char)*(b+1));
    b++;
    scanf("%c", &a);
  }
  *(p+b) = '\0';
}

因此,这可以正确读取字符,但是当它到达字符串末尾时,它不会执行任何操作,而不是继续执行 while 循环。如果我打印出 a 作为 while 循环中的最后一个命令,当它到达字符串末尾时,它会打印一个空格,但程序不会离开循环。

感谢任何帮助,谢谢!

最佳答案

#include <stdio.h>
#include <stdlib.h>

void getarray(char **text){
    char a, *p=malloc(1);
    int b = 1;

    while(1==scanf("%c", &a) && a != '\n'){
        p = realloc(p, b+1);
        p[b++ - 1] = a;
    }
    p[b-1] = '\0';
    *text = p;
}

int main(){
    char *text;
    getarray(&text);
    printf("%s\n", text);
    free(text);
    return 0;
}

关于C 字符与返回键不匹配\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844854/

相关文章:

Ctags 作为创建标签文件的库

c - 包含头文件时如何确保在整个程序中仅创建变量的单个副本

c - 一开始打印的垃圾值是什么原因?

c - 合并排序没有给出正确的输出,c

c - 运行一系列直到小数点第三位相同

c - Perl 中的消息队列

c - Unix daemon() 子例程的 win32 替代方案是什么?

c - 开关盒 assembly 级代码

C : Why startingTime is larger than endingTime with gettimeofday()?

c - 为什么在将二维数组传递给 C 函数时必须提供维度?