C代码可反转字符串-字符串末尾包含NULL字符

问题描述 投票:-3回答:4

1。)是否可以反转包含NULL字符的字符串(这意味着“ abcd”表示为五个字符,包括空字符。)

2。)在我当前的实现中,没有考虑1.),交换期间出现分段错误。即在分配时:* str = * end;

void reverse(char *str)
    {
        char * end = str;
        char tmp;
        if (str)
        {  // to handle null string
            while (*end)
            {  // find the end character
                ++end;
            }
            --end; // last meaningful element
            while (str < end) // terminal condition: str and end meets in the middle
            {   tmp = *str; // normal swap subroutine
                *str = *end; // str advance one step
                *end = tmp;   // end back one step

                str++;
                end-- ;
            }
        }
        return;
    }
c string segmentation-fault reverse
4个回答
2
投票

您的功能正确。似乎问题是您正在尝试反转字符串文字。您不能更改字符串文字。他们是一成不变的。任何尝试更改字符串文字的行为都会导致程序的行为未定义。


0
投票

这样调用代码:


0
投票
  1. 我很确定你可以。您只需要字符串的长度并知道要测试NUL。


0
投票
// You can try this :
         `void reverse(char *str) {
                char *end = str;
                char tmp;
                if (str) {
                    while (*end){
                        ++end;
                    }
                    --end;
                    while (str < end) {
                        tmp = *str;
                        *str++ = *end;
                       *end-- = tmp;
                    }
                }
            }`
© www.soinside.com 2019 - 2024. All rights reserved.