读取字符串直到按Enter键或在数组范围内

时间:2011-04-20 13:34:41

标签: c

我想通过键盘读取字符串以避免缓冲区溢出。我用的时候 fgets(text,30,stdin),它读取但它也读取'\ n'字符。但我不想读'\ n'字符。

3 个答案:

答案 0 :(得分:2)

char s[30];
scanf("%30[^\n]", s);

一点解释:

<强> 30%[^ \ n]的

30这意味着最多读取30个字符[^\n],这意味着读取除“\ n”之外的所有字符。

答案 1 :(得分:1)

一旦你有了字符串,就删除换行符:

int get_line(char *buffer, size_t max)
{
  if(fgets(buffer, max, stdin) == buffer)
  {
    size_t len = strlen(buffer);
    if(len > 0 && buffer[len - 1] == '\0')
      buffer[--len] = '\0';
    return len;
  }
  return 0;
}

UPDATE :更改为返回长度,这可能会给调用者带来一些麻烦。这意味着对于空字符串输入,它将返回0。

答案 2 :(得分:0)

使用'\n'字符进行阅读,但之后将其删除

if (fgets(text, 30, stdin)) {
  size_t tlen = strlen(text);
  if (len > 0) {
    if (text[tlen - 1] == '\n') {
      text[--tlen] = 0;
    } else {
      /* fgets read all it could
      ** but there wasn't a '\n'
      ** for the number of bytes available */
    }
  } else {
    /* empty string read: not even a '\n' */
  }
} else {
  /* fgets failed */
}