提问人:jendeukstan 提问时间:11/1/2022 最后编辑:Vlad from Moscowjendeukstan 更新时间:11/1/2022 访问量:80
使用 malloc 分配的字符串仅返回第一个字符
String allocated with malloc is only returning the first character
问:
我正在编写一个函数来重新排列字符串的字符。我用 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] = '\0';
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;
}
答:
2赞
Vlad from Moscow
11/1/2022
#1
在这个 for 循环的第一次迭代中
for(i = 0; i < len/2; i++){
ans[index++] = s[i];
ans[index++] = s[len - i];
}
该字符设置为 ( 在循环的第一次迭代中等于 ),即 。ans[1]
s[len]
i
0
'\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
评论
0赞
jendeukstan
11/2/2022
谢谢!我现在明白了,我学到了一个新功能。
0赞
Vlad from Moscow
11/2/2022
@jendeukstan 好吧,如果问题解决了,那么通过选择最佳答案来关闭您的问题,您的声誉将会增加:)。
评论