gpt4 book ai didi

尝试 'rewrite' 字符数组的 C++ 错误

转载 作者:行者123 更新时间:2023-11-30 04:27:43 24 4
gpt4 key购买 nike

我正在尝试使用以下代码将字符串转换为全部大写:

int client::get_upper(char*item_in)
{
int k ;
char * temp_str;
int length = strlen(item_in);
temp_str = new char [length+1];
for(k = 0; k < length; ++k)
temp_str[k] = toupper(item_in[k]);
temp_str[k] = '\0';
for(k = 0; k < length; ++k)
item_in[k] = temp_str[k];
return 0;
}

然而,当我尝试这样做时,我收到了来自 Visual Studio 的访问冲突写入位置 xxxxxxxx。这是一个类,所以我不能使用实际的字符串。

最佳答案

如果使用得当,您的代码可以正常工作(最简单的方法是像这样简单地传递一个本地 cstring):

char test[] = "stackoverflow.com";
client::get_upper(test); // client interpreted as a namespace

现在,您的函数充满了错误的方法,即未托管的冗余拷贝(内存泄漏)。

重写了一下:

int client::get_upper(char *item_in)
{
unsigned int length = strlen(item_in);
for(int i = 0; i < length; ++k)
item_in[i] = toupper(item_in[i]);

return 0;
}

如果您想尝试一下,这里有一些适合您的东西,只是为了好玩:

int client::get_upper(char *item_in)
{
int length = strlen(item_in);
for(int i = 0; i < length; ++i)
if((item_in[i] >= 97 && item_in[i] <= 122))
item_in[i] = (int)item_in[i] - 32;

return 0;
}

您的错误很可能是因为您试图推送一个您可能没有真正考虑过的动态字符数组。只需使用本地字符串,一个简单的以 null 结尾的数组。你并没有真正付出那么多,所以这只是猜测。我能做的就是帮助你简化你的表达。由于返回值不执行任何操作,请考虑将其应用于某些内容或切换为 void

希望对您有所帮助。

关于尝试 'rewrite' 字符数组的 C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10730461/

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