在C中反转字符串而不输出为空

Reversing a string in C without the output being null

我正在尝试使用以下代码反转字符串(字符数组),但是当我尝试打印字符串时,值为 null。这是一项家庭作业,但我正在努力学习,因此我们将不胜感激。

void input_reverse_string(const char* inputStr, char* reverseStr)
{
    int i = 0;
    int length = 0;

    for (; *(inputStr++) != '[=10=]'; i++)
    {
        length++;
    }

        while (*inputStr)
    {
        *reverseStr = *inputStr;
        inputStr++;
        reverseStr++;
    }

    
    const char* chr_ptr = &inputStr[length - 1];
    printf("I see a %s\n", *chr_ptr);


    *reverseStr = '[=10=]';
    
    printf("%d", length);

    /* return reverseStr; */ 
} 

有几件事出了问题:

  1. 这是一种计算字符串长度的奇怪方法。你正在使用一个你不需要的索引变量,同时递增 3 个东西,至少可以说是不需要的。

  2. 计算长度后,将inputStr指针递增到末尾,你没有重置指针,所以它仍然指向字符串的末尾(实际上,结束后一个!)。

  3. while 内,您正在向同一方向推进两个指针(inputStrreverseStr),如果您愿意,这不可能是正确的反转 字符串。

正确的做法是:

  1. 计算字符串的长度。使用 strlen() 或手动完成,但您实际上只需要增加 one 变量即可。您可以避免递增 inputStr,只需使用一个临时指针。

  2. inputStr + length开始,向后走。使用指针并执行 -- 或仅索引字符串)。

这是一个工作示例:

void reverse_string(const char* inputStr, char* reverseStr) {
    unsigned len = 0;
    int i;

    while (inputStr[len])
        len++;

    for (i = len - 1; i >= 0; i--) {
        reverseStr[len - i - 1] = inputStr[i];
    }

    reverseStr[len] = '[=10=]';
}

int main(void) {
    char a[6] = "hello";
    char b[6];

    reverse_string(a, b);
    puts(b);

    return 0;
}

输出:

olleh