0

我尝试反转我的字符串并打印该结果。

#include <stdio.h>
#include <string.h>

void reverse(char *string, char *revstr)
{   
    int length, i, j;

    length = strlen(string);

    for (i=length, j=0; i >= 0; i--, j++) {
        revstr[j] = string[i];
    }
}

int void()
{   
    char string[] = "reverse!";
    int length = strlen(string);
    char revstr[length];
    int i;

    reverse(string, revstr);

    printf("%s", revstr); //nothing
    for (i=0; i<=strlen(string); i++) {
        printf("%c", revstr[i]); //It's work
    }
    printf("\n");

    return 0;
}
4

1 回答 1

8

从 C 定义来看,字符串是一个连续的字符序列,以第一个空字符结尾并包括在内。您不应反转字符串的尾随空终止符。

改变:

for (i=length, j=0; i >= 0; i--, j++)

对此

for (i = length - 1, j=0; i >= 0; i--, j++) {

并在函数末尾手动添加尾随空终止符reverse

revstr[length] = '\0';

您还应该为空终止符保留足够的空间:

改变:

char revstr[length];

对此:

char revstr[length + 1];
于 2013-06-01T16:28:31.867 回答