我尝试反转我的字符串并打印出结果.
#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)
从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)