我需要创建一个返回字符串的函数。到目前为止,我已经提出了这个代码:
#include <stdio.h>
#include <string.h>
#define SIZE 256
void str_reverse(char[SIZE], char[SIZE]);
int main(void)
{
char input[SIZE];
char output[SIZE];
printf("Please enter a string\n");
fgets(input, SIZE, stdin);
str_reverse(input, output);
printf("%s \n", output);
return 0;
}
void str_reverse(char in[SIZE], char out[SIZE])
{
int i = strlen(in);
int k = 0;
for(int j = i; j>= 0; j--)
{
out[k] = in[j];
k++;
}
}
但是,每当我尝试运行代码时,我都无法获得输出。有没有人知道什么是错的
答案 0 :(得分:0)
你的&#34;倒车&#34;也包括空字符。所以反向字符串的第一个字符是'\0'
。所以字符串是空的。
更改:
for(int j = i ; j>= 0; j--)
到
for(int j = i - 1; j>= 0; j--)
您还应该在for循环之前检查字符串长度是否为零。否则,i-1
将成为SIZE_MAX
,您将遇到问题!
str_reverse()
中的以下简单条件会处理这种情况:
size_t i = strlen(in);
int k = 0;
if (i<=1) return; //empty string or contains only 1 char char.
答案 1 :(得分:0)
问题在于这一行
int i = strlen(in);
将其更改为
int i = strlen(in)-1;
strlen()
返回字符串的大小,因此当您从in[]
开始复制时,in[j]
将为\0
。它存储在out[0]
。
您需要做的另一项更改是在\0
后面out[]
放置一个for
for(int j = i; j>= 0; j--)
{
out[k] = in[j];
k++;
}
out[k] = '\0';
答案 2 :(得分:0)
i
从strlen(in), so the first character you copy over to
开始is the null byte at the end of the string. Every other character then appears after the null terminator, so
out`是一个空字符串。
从i
开始strlen(in) - 1
,然后添加空终结符和循环结束:
int i = strlen(in) - 1; // start at the last non-null character
int k = 0;
for(int j = i; j>= 0; j--)
{
out[k] = in[j];
k++;
}
out[k] = '\0'; // add the null terminator
答案 3 :(得分:0)
当k
为0
且j
为i
时,您会执行以下操作:
out[0] = '\0';
因此,当函数返回时,out
看起来像一个空字符串。
使用:
for(int j = i-1; j>= 0; j--)
{
out[k] = in[j];
k++;
}
out[k] = '\0';
答案 4 :(得分:0)
在函数变量i
中设置以下方式
int i = strlen(in);
所以在循环中
for(int j = i; j>= 0; j--)
{
out[k] = in[j];
k++;
}
然后j
等于i
,则in[j]
等于字符串'\0'
的终止零in
。因此数组out
从零开始,它将包含一个空字符串。
最好以下列方式声明函数本身
char * str_reverse( char *out, const char *in );
并从函数返回指针out
。在这种情况下,您可以编写例如
puts( str_reverse( output, input ) );
考虑到函数fgets
通常还将新行字符存储在字符串中。你应该删除它。你可以用以下方式做到这一点
input[strcspn( input, "\n" )] = '\0';
也可以代替此语句中的int类型
int i = strlen(in);
最好使用类型size_t
。
size_t i = strlen(in);
它是函数strlen
的返回值的类型。但在这种情况下,您还应该正确地编写循环。:)