Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中手动计算字符串中的字符数_C_String_Char - Fatal编程技术网

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

在C中手动计算字符串中的字符数,c,string,char,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<d

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

#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;
}

它有时也会打印一些随机字符,但会精确计数。有人能告诉我这段代码有什么问题吗?

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

brojznak()
中的(*str++!='\0')
不知道何时停止

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 Unos(char*string,int duzina){
int i=0;
字符c;
做{
c=getchar();
字符串[i]=c;
i++;
}而(c!='\n'&(i+1)试试这个

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

你想要这个代码的正确输出是什么?你说:
另一方面,如果我们改变条件
。你发布的
brojznak()
的第一个和第二个实现之间没有区别。你在哪里定义了
recenica
,或者你的意思是
printf(“%d”,brojznak(“recenica”));
第二个brojznak与第一个brojznak相同,我认为您需要解决这个问题。给定的字符串不会以
'\0'
终止。是的。肯定是字符串终止。“如果流位于文件结尾,则设置流的文件结尾指示符,
getchar
返回
EOF
”当然,这个答案的代码将无休止地循环。
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
}
for(i=0; getchar()!='\n'; ++i)
       ;