c - 检查指针是否到达字符串末尾时出错

标签 c string pointers

我正在研究一个字符串反转问题,我试图将两端的值相互交换。作为反向函数的一部分,我有一行检查指针是否到达字符串结尾字符(以 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/

相关文章:

javascript - 替换字符串加上它周围的括号不适用于 RegExp

c - C 中的二维数组指针

将 char 数组中的内容转换为 C 中的十六进制(例如 : {'5' , 'A' } 到 0x5A)

c - 是否可以将指针和数组作为函数参数传递?

c - 将 for 循环中的值存储到数组中

c - 如何生成预处理的 C 代码

java - 性能:JAVA排列

c - C 中的指针导致未知的随机字符

c - 如何在 C 中使用 java webservice

求级数 1^4 + 2^4 + 3^4 + … + n^4 之和的 C 程序