我正在研究一个字符串反转问题,我试图将两端的值相互交换。作为反向函数的一部分,我有一行检查指针是否到达字符串结尾字符(以 while(*end!= '\0')
的形式) .但是,这似乎不起作用,并且在 while 循环结束时,当我取消引用“结束”时,我变得一片空白。当我使用 (while(*end)
) 时,一切正常,但我必须随后递减我的指针“end”以确保我正在访问我的字符串的最后一个元素。为什么我不能根据字符串文字“\0”检查指针?
#include<stdio.h>
void reverse(char* s);
void main(){
char str[]="abcdef";
printf("%s\n",str);
reverse(str);
printf("%s\n",str);
}
void reverse(char* p){
char* start = p;
char* end = p;
char tmp;
int length =0;
while(*end!='\0'){
end+=1;
length+=1;
}
printf("%c\n",*end); // problem line
int c;
for (c = 0; c < length/2; c++)
{
tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
//printf("%s\n",p);
}
最佳答案
在//Problem line
*end
的值是'\0'
- 你应该打印 '\0'
的整数值验证哪个是 0 并且它有效 - 除此之外你需要取消注释 }
来自 reverse
功能。
'\0'
是不可打印的字符:Reference: Non-printable and Printable ASCII Characters
关于c - 检查指针是否到达字符串末尾时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52804826/