我有这个代码:
void printArray(char* p, int len)
{
for( p ; p < p + len ; p++ )
{
printf("%c", *p);
}
printf("\n");
}
int main()
{
char* abc = "abcdefghijklmnopqrstuvwxyz";
printArray(abc, 26);
return 0;
}
这应该打印所有英文字母,但是存在运行时错误,我需要找出导致它的原因以及如何修复它。 我已经尝试了任何我想到的方法来修复它,但没有任何帮助,它只是打印了很多随机的东西。 我在这里先向您的帮助表示感谢。 P.S:这不是我写的代码,我只需要找到错误并修复它。
最佳答案
停止的条件
p < p + len
不会像 p++
在循环的每次迭代中那样为 false。您最终访问无效的内存位置,这会导致未定义的行为,这就是导致运行时错误的原因。要修复它,请使用另一个变量
char *tmp=p+len;
并将条件更改为
p < tmp
另一种方法是在每次迭代中减少len
。一旦 len
为零,就退出循环:
void printArray(char* p, int len)
{
for( p ; len ; --len )
{
printf("%c", (*p)++);
}
printf("\n");
}
关于使用指针打印字母表的 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29326514/