手动计算C中字符串中的字符数

时间:2015-08-29 22:10:19

标签: c string char

我尝试手动计算字符串中的字符数,包括任何空格。我编码了这个:

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

void Unos(char* string, int duzina)
{
    int i=0;
    char c;
    do {
        c=getchar();
        string[i]=c;
        i++;
    } while(c != '\n' && i<duzina);
}

int brojznak(char* str)
{
    int i=0,br=0;
    while(*str++ != '\0')
    {
        br++;
    }
    return br;
}

int main()
{
    char recenica[100];
    printf("Unesite recenicu\n");

    Unos(recenica,100);
    int i=0;

    printf("%d",brojznak(recenica));
    return 0;
}

此代码无法正常运行,但我认为应该如此。另一方面,如果我们改变条件:

int brojznak(char* str)
{
    int i=0,br=0;
    while(*str++ != '\0')
    {
        br++;
    }
    return br;
}

它有时会再打印一些随机字符,但要准确计算。谁能告诉我这段代码有什么问题?

2 个答案:

答案 0 :(得分:2)

Unos()中缺少字符串终止。

while(*str++ != '\0')中的

brojznak()不知道何时停止。

void Unos(char* string, int duzina) {
  int i=0;
  char c;
  do {
    c = getchar();
    string[i] = c;
    i++;
  } while(c != '\n' && (i + 1) <duzina);  // Insure enough room
  string[i]='\0';  // add this
}

其他一些改进:

void Unos2(char* string, size_t duzina) {
  size_t i = 0;
  while ((i+1) < duzina) { Only attempt to read if space allows it.
    int c = getchar(); // Use int to distinguish EOF from characters
    if (c == EOF) break;
    string[i] = c;
    i++;
    if (c == '\n') break;
  }
  string[i] = '\0';  // add this
}

答案 1 :(得分:0)

试试这个

for(i=0; getchar()!='\n'; ++i)
       ;