gpt4 book ai didi

c++ - 如何将 cin'd c 样式字符串传递给函数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:41:41 27 4
gpt4 key购买 nike

我可以将一个 C 风格的字符串分配给一个变量并将其传递给一个函数,我可以 cin/cout 一个 C 风格的字符串,但我不能 cin 一个 C 风格的字符串,然后 将其传递给一个函数。我该怎么做?

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

class SzString // edit 2: changed to Upper Camel for class name (Thanks Rabbiya Shahid)
{
int m_length;
char* m_szString;

public:
void SetString(char* szString) // b) line on which program crashes after call from 'line a'
{
m_szString = szString;
m_length = strlen(szString);
}

char* GetString()
{
return m_szString;
}

};

SzString aString;

int main()
{
using namespace std;
cout << "Enter a string: ";
char* szString; // line x (referenced following 'EDIT:')
cin >> szString;
aString.SetString(szString); // line a

cout << endl << aString.GetString();

return 0;
}

编辑:

我用两种方法修复了它。首先,我按照建议改为使用 std::string,然后我返回到 c 风格的字符串并通过将行 x: char* szString 更改为 char 来以第二种方式修复它* szString = new char(基于被提醒 char* szString 没有分配空间)。

编辑 3:(感谢 πìντα ῥεῖ)

在“a 行”之后的代码的 c 风格字符串版本中添加了以下代码以防止内存泄漏:

szString = 0;
delete[] szString;

最佳答案

main 函数中你有定义

char* szString;

这告诉编译器 szString 是一个指向字符的指针。但是你没有让那个指针实际上指向任何东西。

所以当你用它来获取输入时,输入操作会将输入写入某个未知位置。这是未定义的行为,会导致您的程序出现意外行为,包括崩溃。

要么您必须使指针指向某个有效位置。或者更好的是,不要对字符串使用指针,使用 std::string .

关于c++ - 如何将 cin'd c 样式字符串传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21967877/

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