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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
查找字符串的长度 我已经写了一个字符串长度的代码 这得到了成功编译购买有一些问题在 输出 输入字符串后,输出被卡住 我必须用指针找到长度 #包括 国际长度(字符*); void main() { char-str[20]; scanf(“%s”,str); printf(“%s”,str); int l; l=长度(str); printf(“%d”,l); } 内部长度(字符*p) { int l=0; 而(*p!='\0') { l++; } 返回l; }_C_String - Fatal编程技术网

查找字符串的长度 我已经写了一个字符串长度的代码 这得到了成功编译购买有一些问题在 输出 输入字符串后,输出被卡住 我必须用指针找到长度 #包括 国际长度(字符*); void main() { char-str[20]; scanf(“%s”,str); printf(“%s”,str); int l; l=长度(str); printf(“%d”,l); } 内部长度(字符*p) { int l=0; 而(*p!='\0') { l++; } 返回l; }

查找字符串的长度 我已经写了一个字符串长度的代码 这得到了成功编译购买有一些问题在 输出 输入字符串后,输出被卡住 我必须用指针找到长度 #包括 国际长度(字符*); void main() { char-str[20]; scanf(“%s”,str); printf(“%s”,str); int l; l=长度(str); printf(“%d”,l); } 内部长度(字符*p) { int l=0; 而(*p!='\0') { l++; } 返回l; },c,string,C,String,在您的代码中,问题就在这里 while(*p!='\0') while(*p!='\0') 这里的指针*p不会递增。所以,当循环无限工作时,可能会导致程序崩溃 所以,使用 while(*p++!='\0') 而不是 #包括 国际长度(字符*); int main() { char-str[20]; scanf(“%s”,str); printf(“%s”,“输入字符串的长度为”); int l; l=长度(str); printf(“%d”,l); } 内部长度(字符*p) { int l

在您的代码中,问题就在这里

while(*p!='\0')
while(*p!='\0')
这里的指针
*p
不会递增。所以,当循环无限工作时,可能会导致程序崩溃

所以,使用

while(*p++!='\0')
而不是

#包括
国际长度(字符*);
int main()
{
char-str[20];
scanf(“%s”,str);
printf(“%s”,“输入字符串的长度为”);
int l;
l=长度(str);
printf(“%d”,l);
}
内部长度(字符*p)
{
int l=0;
而(*p!='\0')
{
l++;
p=p+1;
}
返回l;
}

第一个错误-您没有在scanf中使用“&”。
第二个错误-您需要在while循环中将p++放在l++之后。

考虑编辑为p+=sizeof(char),因为++只适用于char为字节大小的架构。哦..这是一个愚蠢的错误。非常感谢rsp的帮助。@CaioSym:sizeof(char)在定义上总是1,所以这不值得担心。此外,++运算符还考虑了大小,因此它适用于所有数据类型,而不考虑大小。有趣的是。我可以发誓在某些情况下它可以被映射到两个字节。。。关于++的好观点。“我忘了它把尺寸考虑在内了。”凯奥辛:这是个坏建议。指针总是随着它所指向对象的大小而递增。
leng()
中的循环测试
*p
的值,但不会改变
p
*p
。因此,这是一个无限循环……如果您使用了调试器,甚至每次都只打印出几个重要的变量,这一点是显而易见的:(在您可以使用调试器之前,请不要再编写代码。它可以。&在读取字符串时不在scanf函数中使用。可以。它在没有&的情况下工作。但是为什么在整数之类的字符串中不需要它?@Shashwat:在C中的大多数上下文中,数组被转换为指向第一个元素集的指针。
while(*p!='\0')
#include<stdio.h>
int leng(char*);
int main()
 {
  char str[20];
  scanf("%s",str);
  printf("%s", "Length of input string is ");
  int l;
  l=leng(str);
  printf("%d",l);
    }

int leng(char*p)
{
int l=0;
while(*p!='\0')
{
    l++;
    p = p +1;
}
return l;
}