【发布时间】:2021-05-22 07:01:48
【问题描述】:
我正在编写一些 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;
}
【问题讨论】:
-
您有一个错误。
Str数组的最后一个有效元素是str[ArrSz - 1]而不是str[ArrSz]。不过可能还有更多问题,我没有检查 -
这里
Str = (char*)malloc(ArrSz * sizeof(char));。我想应该是(ArrSz + 1)*.. -
对于
10和Hello的输入,您期望什么输出?
标签: c reverse c-strings function-definition