c - 为什么我在 c 中反转字符串的函数不起作用?
问题描述
我正在编写一些 C 代码,其中用户输入所需的字符串大小,然后输入一个字符串,该字符串将被反转然后打印(而不是反向打印。)我还想提一下,我不想使用外部库,重点是能够手动完成。我使用动态内存分配来创建一个由用户输入的大小的字符串,并称为“反向数组”函数。在调用该函数之前一切正常。我反转字符串的方法遵循与反转普通数组相同的原则,但不是移动整数,而是移动字符。你能向我解释我做错了什么吗?
我的代码:
#include <stdio.h>
#include <stdlib.h>
int RvsArr(char *Str, int end)
{
int start = 0;
char tmp;
while (start < end)
{
tmp = Str[start];
Str[start] = Str[end];
Str[end] = tmp;
start++;
end--;
}
printf("%s", Str);
return 0;
}
int main()
{
int ArrSz;
printf("Please enter array size: ");
scanf("%i", &ArrSz);
char *Str;
Str = (char *)malloc(ArrSz * sizeof(char));
printf("Please enter your string: ");
scanf("%s", Str);
RvsArr(Str, ArrSz);
free(Str);
return 0;
}
解决方案
您需要反转实际的字符串,而不是整个缓冲区。
char *RvsArr(char* Str)
{
char *end, *wrk = Str;
char tmp;
if(wrk && *wrk)
{
end = Str + strlen(wrk) - 1;
while(wrk < end)
{
tmp = *wrk;
*wrk++ = *end;
*end-- = tmp;
}
}
return Str;
}
int main()
{
int ArrSz;
printf("Please enter array size: ");
scanf(" %i", &ArrSz);
char* Str;
Str = malloc(ArrSz * sizeof(char));
printf("Please enter your string: ");
scanf(" %s", Str);
printf("\n`%s`\n", RvsArr(Str));
free(Str);
return 0;
}
推荐阅读
- javascript - 我可以在需要支持 IE 的遗留项目中使用 Vue + Vuetify 吗?
- apache-camel - Apache骆驼多部分问题
- vhdl - VHDL 中的 FSM 是 Moore 还是 Mealy?
- android - 从 fireBase 获取值
- linux - 连接 Oracle DB sqlplus / as sysdba 的问题(未设置 TWO_TASK)
- python - 为什么 Numpy 中的数组索引会产生这个结果?
- angular - 如何保护所有禁用路由[CanDeactivate]?
- plugins - 自定义 Tensorboard 组件(运行选择器)
- erlang - 如何在 ERLANG / ELIXIR 中读取 UNC 路径
- javascript - 使用一个嵌套的对象数组映射一组对象