为什么要为指针返回类型返回一系列字符?

Why do I return a series of a chars for a pointer return type?

本文关键字:一系列 字符 返回 返回类型 指针 为什么      更新时间:2023-10-16

我正在尽力返回具有特定值的指针。虽然,我不明白为什么我得到的字符比平时多。我问了几个人,我被告知我得到了一个子字符串?

问题:我输入了热狗这个词。 我希望在索引[2]处返回一个指针。虽然相反,我得到了炭狗。为什么?我怎么会只得到索引[2]?我正在考虑取消引用它,但是我在使返回类型工作时遇到问题。

我无法更改函数的返回类型或参数。

#include <iostream>
char * GetValueAtIndex(char * const c, int index);
void ReadString(char * c, int length);
int main()
{
const int size = 10;
char ma[size];
char * pointer = ma;
ReadString(ma, 20);
std::cout << GetValueAtIndex(pointer, 3) << std::endl;
system("pause");
}
void ReadString(char * c, int length)
{
std::cin.getline(c, length);
}

char * GetValueAtIndex(char * const c, int index)
{
return c + index;
}

修改函数以返回值而不是指针:

char GetValueAtIndex(char * const c, int index){
return *(c + index);
}

或者只是取消引用函数返回的指针:

std::cout << *GetValueAtIndex(pointer, 3);

当您有一个char*指针时,如下所示:

char* p = "Hotdog";

并将该p发送到std::cout它将被视为指向(a(C 样式字符串的第一个字符的指针并按此打印。C 样式字符串以结尾。因此,它将打印出p指向的任何字符,后跟所有剩余字符,直到它到达字符串的末尾。 如果你递增一个指针,它会指向下一个字符,依此类推:

char* p = "Hotdog";
p++;
std::cout << p;
p+=3;
std::cout << p;

如果您只需要打印p指向的单个字符,则将取消引用的指针发送到std::cout

char* p = "Hotdog";
std::cout << *p;

为什么我要为指针返回类型返回一系列字符?

你返回一个指向一个字符的指针,就像你陈述你试图做什么一样。

我希望在索引处返回一个指针[2]

如您所料,该指针已返回。

虽然相反,我得到了炭狗。

这是因为您将指针插入到流中。char*的流插入运算符要求输入是指向以 null 结尾的字符串的指针,其行为是打印整个字符串。指针指向从字符'd'开始的字符数组。

我正在考虑取消引用它

如果取消引用指针,将获得指向的字符 ('d'(:

std::cout << *GetValueAtIndex(pointer, 3) << std::endl;