c语言 - 使用 malloc 分配的字符串仅返回第一个字符



我正在编写一个函数来重新排列字符串的字符。我用malloc分配了新字符串并初始化它,然后返回它。但是当我返回它时,它总是只返回第一个字符。

我尝试逐个打印新字符串的字符,它们打印正确,但是当我调用该函数时,只返回第一个字符。我不知道为什么。任何帮助将不胜感激! 这是我的代码:

char * solution(char * s) {
int len = strlen(s);
int i;
int index = 0;

char *ans = (char *) malloc(sizeof(char) * (len + 1));
if (ans == NULL) {
fprintf(stderr, "Ran out of space in some function n");
exit(1);
}
//char* ans = (char *) malloc(len + 1);
ans[len] = '';

for(i = 0; i < len/2; i++){
ans[index++] = s[i];

ans[index++] = s[len - i];
}
if(len % 2 == 1){
ans[index] = s[len/2];
}
return ans;
}

在 for 循环的第一次迭代中

for(i = 0; i < len/2; i++){
ans[index++] = s[i];

ans[index++] = s[len - i];
}

字符ans[1]设置为s[len](i等于循环第一次迭代中的0),即''

结果,您将获得一个仅包含一个字符的字符串。

你所做的就是你得到的:)

看来你的意思是

ans[index++] = s[len - i - 1];

请注意,由于源字符串在函数中没有更改,因此函数应该像

char * solution( const char * s );

原始声明

char * solution(char * s);

表示字符串将就地更改。

如果要就地更改字符串,则该函数可以按以下方式查看,如下面的演示程序所示。

#include <string.h>
#include <stdio.h>
char * solution( char *s )
{
size_t n = strlen( s );
for (size_t i = 1; i < n; i += 2)
{
char c = s[n - 1];
memmove( s + i + 1, s + i, n - i - 1);
s[i] = c;
}
return s;
}
int main( void )
{
char s[] = "0123456789";
puts( s );
puts( solution( s ) );
}

程序输出为

0123456789
0918273645

最新更新