字符串长度打印奇怪的数字。我的代码中的问题在哪里?
String length prints weird numbers. Where is the issue in my code?
我的任务是:编写一个不使用库计算字符串长度的程序
这是我的回答,但是执行起来有问题。长度显示不正确!对于我插入的任何字符串,执行显示长度为 107 或 127。
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaration of variables :
char ch[50+1];
int length, i;
//data :
printf("ch : ");
scanf("%s", &ch);
printf("\n");
//Search length of string :
i = 0;
do
{
if(ch[i] == '[=10=]')
{
length = i;
}
else
{
i++;
}
}
while(ch[i] != '[=10=]');
//Result "
printf("length pf %s is : %d \n", ch, length);
return 0;
} ```
do-while
循环的算法有问题。
计数器 i
在条件检查前不久递增。
如果在下一个数组元素中找到 '[=15=]'
(请注意,i
递增)循环立即中断并且无法将 length
设置为 i
在下一次迭代(因为没有下一次迭代)。
由于length
没有初始化,程序有undefined behavior.
变化:
do
{
if (ch[i] == '[=10=]')
{
length = i;
}
else
{
i++;
}
}
while (ch[i] != '[=10=]');
至
while (ch[i] != '[=11=]') i++;
length = i;
或更简单:
while (ch[i] != '[=12=]') length++;
并省略计数器i
,但您需要0
初始化length
。
旁注:
将 scanf("%s", &ch);
更改为 scanf("%s", ch);
。 - ch
衰减为指向其第一个元素的指针。
在scanf()
-> scanf("%50s", ch);
处使用长度修饰符,以确保当用户输入超过50个字符的字符串时不会发生缓冲区溢出。
如果在使用输入时发生错误,请始终检查 scanf()
的 return 值。
永远不要忽略编译器警告。对于 scanf("%50s", ch);
,编译器应该发出警告。
我的任务是:编写一个不使用库计算字符串长度的程序
这是我的回答,但是执行起来有问题。长度显示不正确!对于我插入的任何字符串,执行显示长度为 107 或 127。
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Declaration of variables :
char ch[50+1];
int length, i;
//data :
printf("ch : ");
scanf("%s", &ch);
printf("\n");
//Search length of string :
i = 0;
do
{
if(ch[i] == '[=10=]')
{
length = i;
}
else
{
i++;
}
}
while(ch[i] != '[=10=]');
//Result "
printf("length pf %s is : %d \n", ch, length);
return 0;
} ```
do-while
循环的算法有问题。
计数器 i
在条件检查前不久递增。
如果在下一个数组元素中找到 '[=15=]'
(请注意,i
递增)循环立即中断并且无法将 length
设置为 i
在下一次迭代(因为没有下一次迭代)。
由于length
没有初始化,程序有undefined behavior.
变化:
do
{
if (ch[i] == '[=10=]')
{
length = i;
}
else
{
i++;
}
}
while (ch[i] != '[=10=]');
至
while (ch[i] != '[=11=]') i++;
length = i;
或更简单:
while (ch[i] != '[=12=]') length++;
并省略计数器i
,但您需要0
初始化length
。
旁注:
将
scanf("%s", &ch);
更改为scanf("%s", ch);
。 -ch
衰减为指向其第一个元素的指针。在
scanf()
->scanf("%50s", ch);
处使用长度修饰符,以确保当用户输入超过50个字符的字符串时不会发生缓冲区溢出。如果在使用输入时发生错误,请始终检查
scanf()
的 return 值。永远不要忽略编译器警告。对于
scanf("%50s", ch);
,编译器应该发出警告。