【发布时间】:2019-11-06 06:03:42
【问题描述】:
我很清楚,这方面的说明效率非常低/几乎已过时。实际上,我使用字符串开发了一个更简单的解决方案,但出于教育目的,我的大学决定要求我们通过使用指针和 char 数组而不是字符串来解决这个问题。
基本上,我需要传递一个预定义的 char 数组(一个特定的短语)并将其反转返回。
到目前为止,我的输出完全是胡言乱语(有些字符我什至无法在此处输入)所以我认为我一定是做错了什么,但我不明白为什么。
为了进行实验,我尝试手动将函数体末尾的 *ptr_cha 分配为类似于“Hello”的内容,但随后遇到了类型转换错误。如果我手动将 temp[0] 分配为“hello”,并跳过 for 循环并在最后简单地说 *ptr_cha[0] 等于 temp[0],我仍然得到胡言乱语。 如果我尝试在函数开始时输出 clone 的内容(在说它等于 ptr_cha[0] 之后),它会说内容是“d”,一个在原句中甚至不存在的字母。
这是我的全部代码:
#include <iostream>
#include <wchar.h>
#include <locale.h>
#include <array>
using namespace std;
void invertChar(char *ptr_cha[]);
int main()
{
setlocale(LC_ALL, "");
char sentence[] {"Pablito clavó un clavito que clavito clavó Pablito"};
char *ptr_sentence[] {nullptr};
*ptr_sentence = sentence;
invertChar(ptr_sentence);
cout << ptr_sentence[0];
};
void invertChar(char *ptr_cha[]) {
char clone[] = {""};
char temp[] = {""};
ptr_cha[0] = clone;
int length = sizeof(clone)/sizeof(*clone);
int j = length;
for(int i = 0; i < length; i++) {
temp[i] = clone[j];
j--;
};
*ptr_cha[0] = temp[0];
};
如前所述,想法是将句子设置为其倒置形式并显示在输出中。
作为一个额外的附带问题:为什么在 c++ 中计算 char 数组的长度如此复杂/冗长?对于字符串,有一个简单的方法,在这里你必须完成整个“技巧”,将数组的大小除以其引用的大小。我什至看不到数组的存储大小除以其指针的存储大小如何返回数组的长度...
【问题讨论】:
-
尝试长度/2 ...
-
您可以使用
strlen获取字符数组的长度 -
用
length - 1初始化j,因为0-indexing -
代码没有意义。不需要指针数组。在函数中,您用另一个覆盖指针。然后你计算数组大小,这没有任何意义,因为数组无论如何都是常数。然后您使用这些数组进行访问,它们不包含任何原始字符串,并且具有越界访问权限。你需要删除所有额外的东西,只需要一个数组,如果它就地,则进行交换,否则分配一个新数组并复制。
-
@SamiKuhmonen 指针数组在哪里?您是指函数参数中的 *ptr_cha[] 吗?如果我尝试只使用 *ptr_cha,它不会编译。这是它编译的唯一方法。交换必须在函数内部进行,并且必须通过指针进行,这是项目的要求。