打印阵列填充其他功能

row*_*248 0 c

我尝试反转我的字符串并打印出结果.

#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;
}
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 8

从C定义,字符串是由第一个空字符终止并包括第一个空字符的连续字符序列.您不应该反转字符串的尾随空终止符.

更改:

for (i=length, j=0; i >= 0; i--, j++)
Run Code Online (Sandbox Code Playgroud)

对此

for (i = length - 1, j=0; i >= 0; i--, j++) {
Run Code Online (Sandbox Code Playgroud)

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

revstr[length] = '\0';
Run Code Online (Sandbox Code Playgroud)

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

更改:

char revstr[length];
Run Code Online (Sandbox Code Playgroud)

对此:

char revstr[length + 1];
Run Code Online (Sandbox Code Playgroud)