在C中查找字符串的长度(不使用strlen)

下面的代码不会打印任何内容 –

int main() { char *input = "This is a string"; find_length(input); return 0; } void find_length(char *input){ printf("%s", input); int length = 0; while(input[length]!='\0'); { length++; printf("%i", length); } } 

循环后面有一个额外的分号:

 while(input[length]!='\0'); ^ does not belong here!!! 

所以它陷入无限循环。 摆脱它。


此外,可能存在流缓冲。 尝试添加一些\n 。 或者调用fflush(stdout)来刷新输出流。

 void find_length(char *input){ printf("%s\n", input); int length = 0; while(input[length]!='\0') // remove ; { length++; printf("%i\n", length); } } 

是的,但由于它不打印换行符,缓冲区在程序退出之前不会被刷新,并且最终会在同一行上显示shell提示符。 有些人有回车的shell提示,这会覆盖程序输出。

改变这个:

 printf("...", ...); 

对此:

 printf("...\n", ...); 

以下是解决方案。

 #include  int main() { char str[100]; printf("Enter a string: "); printf( "\rLength is: %d", printf("Entered string is: %s\n", gets(str)) - 20); return 0; } 

在上面的程序中,gets()返回输入的字符串。 我们使用第一个printf打印长度。 第二个printf()调用gets()并使用gets()的返回值打印输入的字符串,它还打印20个额外的字符用于打印“输入的字符串是:”和“\ n”。 这就是为什么我们从第二个printf的返回值中减去20并得到长度。

增加length变量或删除分号到while循环。

尝试,

 void find_length(char *input){ int length = 0; /* declaration */ printf("%s", input); while(input[length++]!='\0'); printf("%i", length); } /* OR */ void find_length(char *input){ int length = 0; while(input[length]!='\0') { length++; } printf("%i", length); } 

我猜其他post会指出你正确的答案。

但我只想在这里留下一个注释。 如果find_length()返回字符串的长度( size_t或者它也可以是int )而不是void

OTOH,你可以看看strlen()的各种其他实现。 希望能帮助到你!

 #include  // array version int strlen1(char a[]) { int len = 0; while (a[len]) len++; return len; } // pointer version // *p++ = dereference the pointer value and then // increment the pointer to the next memory location int strlen2(char *p) { int len = 0; while (*p++) len++; return len; /* int *q = p; while (*p); p++; return pq; */ } int main() { char s[] = "test string"; char *p = "another string"; printf("strlen1(%s) = %d \n", s, strlen1(s)); printf("strlen1(%s) = %d \n", p, strlen1(p)); printf("strlen2(%s) = %d \n", s, strlen2(s)); printf("strlen2(%s) = %d \n", p, strlen2(p)); return 0; } 

查找给定字符串长度的简便方法

 int strLength(const char *_array) { int str_len=0; while(*(_array++)) str_len++; return str_len; } 

这个问题很老但是……为什么你要创建一个循环来获取字符串的长度,因为printf可以通过说明符%n来做到这一点:

 #include  int main(int argc, char* argv[]) { char *input = "This is a string"; int length=0; printf("%s%n",input,&length); printf("\nThe length of \"%s\" is %d",input, length); return 0; } 

或者您甚至可以在打印字符串之后得到printf函数的输出:

 length=printf("%s",input); printf("\nThe length of \"%s\" is %d",input, length); 
 C++, Count string without functions #include  #include  using namespace std; int main() { string leng; cout << "Enter String for Count" << endl; cin >> leng; int a = 0; while (leng[a++]); { cout << a; } } 

这是你的答案:(len将是长度的字符串,字符串是字符串!)

 int len; for(len=0; string[len]!='\0'; len++); printf("Length of string is %i", len); 
 main(int argc, char *argv[]) { char *input = "Enter Any string"; printf("your Entered String is: %s\n", input); int length = 0; while (input[length] != '\0') { length++; } printf("length is : %i\n", length); }