以下代码不会打印任何内容 -
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);
}
}
答案 0 :(得分:19)
你的循环背后有一个额外的分号:
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);
}
}
答案 1 :(得分:3)
是的确如此,但由于它没有打印换行符,因此在程序退出之前缓冲区不会被刷新,并且最终会在同一行上显示shell提示符。有些人有回车的shell提示,这会覆盖程序输出。
改变这个:
printf("...", ...);
对此:
printf("...\n", ...);
答案 2 :(得分:1)
以下是解决方案。
#include <stdio.h>
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个额外的字符用于打印“Entered string is:”和“\ n”。这就是为什么我们从第二个printf的返回值中减去20并得到长度。
答案 3 :(得分:0)
增加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);
}
答案 4 :(得分:0)
我猜其他帖子会指出正确的答案。
但我只想在这里留下一个注释。如果find_length()
返回字符串的长度(size_t
或它也可能是int
)而不是void
OTOH,您可以查看strlen()
的各种其他实现。希望它有所帮助!
#include <stdio.h>
// 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 p-q;
*/
}
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;
}
答案 5 :(得分:0)
查找给定字符串长度的简便方法
int strLength(const char *_array)
{
int str_len=0;
while(*(_array++))
str_len++;
return str_len;
}
答案 6 :(得分:0)
这是你的答案:(len将是字符串的长度,字符串是字符串!)
int len;
for(len=0; string[len]!='\0'; len++);
printf("Length of string is %i", len);
答案 7 :(得分:0)
这个问题很老但是......为什么你要创建一个循环来获取字符串的长度,因为printf
已经可以通过说明符%n
来做到这一点:
#include <stdio.h>
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);
答案 8 :(得分:0)
C++, Count string without functions
#include <iostream>
#include <string>
using namespace std;
int main()
{
string leng;
cout << "Enter String for Count" << endl;
cin >> leng;
int a = 0;
while (leng[a++]);
{
cout << a;
}
}
答案 9 :(得分:0)
如果您使用for(int i=0; str[i];i++)
,则只要字符数组中的元素不是'\0'
,则此循环也将运行。您可以算到'\0
为止。
在下面的代码中,您可以看到与while
循环相同的内容,但是返回时应该执行-1
,就像循环遇到'\0'
时终止一样,但它还会添加1
。如果这使您感到困惑,则可以对for(length=0; ch[length];length++);
使用相同的逻辑,则不必执行-1
;
#include <stdio.h>
int strlength(char ch[]){
int length =0;
while(ch[length++]);
return length-1;
}
int main(){
char ch[20];
scanf("%s", ch);
// printf("%s", ch);
printf("%i\n",strlength(ch));
return 0;
}
答案 10 :(得分:0)
您可以使用 strlen
源代替 strlen
Gnu C 编译器 - GLIBC
#include <string.h>
size_t strlen (const char *str)
{
int cnt;
asm("cld\n" /* Search forward. */
/* Some old versions of gas need `repne' instead of `repnz'. */
"repnz\n" /* Look for a zero byte. */
"scasb" /* %0, %1, %3 */ :
"=c" (cnt) : "D" (str), "0" (-1), "a" (0));
return -2 - cnt;
}
注意 asm
用于在 C 源代码中插入程序集(也可能是 __asm__
)
答案 11 :(得分:-2)
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);
}