gpt4 book ai didi

c++ - 通过引用传递结构并分配字符串

转载 作者:行者123 更新时间:2023-11-28 02:31:23 24 4
gpt4 key购买 nike

这是一个简单的程序,我试图通过引用和字符串将结构传递给函数。该函数应该检测字符串的长度并为其分配一个结构成员。这是程序:

#include <iostream>
#include <string.h>

struct stringy // structure definition
{
char *str;
int ct;
};

void set(stringy &beany, const char *testing); // function definition

int main()
{
stringy beany;
char testing[] = "Reality isn't what it used to be.";
set(beany, testing); // function call
return 0;
}

void set(stringy &beany, const char *testing) // function prototype
{
int i=0;
while (*(testing+i) != '\0') // this loop counts the number of characters
{
i++;
std::cout << i << "\n";
}
beany.str = new char[i]; // dynamic storage allocation
std::cout << strlen(beany.str); // printing the length of the string
}

由于某种原因,函数 set() 中最后一行的输出是 47,而“i”的值为 33。最后 15 个字节被垃圾值填充。我希望 beany.str 的长度应该等于 *testing 的长度。

最佳答案

您为 beany.str 分配了内存,但您没有初始化该内存。分配内存的内容,没有任何初始化,是不确定的(实际上看起来是随机的)。

另外不要忘记,旧的 C 风格字符串需要由特殊的 '\0' 字符终止(否则 strlen 之类的函数将不起作用)。

这两个问题,使用未初始化的内存和忘记终止符,都会导致undefined behavior。 .

关于c++ - 通过引用传递结构并分配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com