gpt4 book ai didi

c++ - VS2010 中的堆错误

转载 作者:行者123 更新时间:2023-11-28 06:34:19 24 4
gpt4 key购买 nike

我正在尝试实现识别 Windows 文件属性的程序。我有一个代码,但有时,在主 block 中传递 return 后我会收到堆错误。感谢您的关注和帮助!

#include "stdafx.h"
#include <Windows.h>
#include <conio.h>

_TCHAR* getStringAttributes(int value, _TCHAR* str[])
{
DWORD d = GetFileAttributes(str[value]);
_TCHAR* temp;

switch(d)
{
case 2048: temp = L"Compressed\n"; break;
case 32: temp = L"Archive\n"; break;
case 16: temp = L"Directory\n"; break;
case 16384: temp = L"Encrypted\n"; break;
case 2: temp = L"Hidden\n"; break;
case 128: temp = L"Normal\n"; break;
case 1: temp = L"Readonly\n"; break;
case 4: temp = L"System\n"; break;
case 256: temp = L"Temporary\n"; break;
default: temp = L"Error or unsupported attribute\n"; break;
}

return temp;
}

int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR* attString = new _TCHAR();
char* ynAnswer = new char();

if(argv[1] == NULL)
{
printf("%s\n","You didn't type file path. Try again?[Y/N]");
gets_s(ynAnswer,10);

if(*ynAnswer == 'y' || *ynAnswer == 'Y')
{
printf("%s\n","Type in a path to the file");
argv[1] = new _TCHAR();
_getws(argv[1]);

if(argv[1] != L"")
{
printf("%s","Attribute: ");
attString = getStringAttributes(1,argv);

_tprintf(attString);
printf("%s","for\n");
_tprintf(argv[1]);
}
}
}
else
{
printf("%s","Attribute: ");
attString = getStringAttributes(1,argv);
_tprintf(attString);
}

printf("%s","Goodbye");
getch();

delete[] ynAnswer;
delete[] attString;

return 0;
}

最佳答案

您将整个字符串输入到 1 或 2 字节的字符串中。这些分配:

_TCHAR* attString = new _TCHAR();
char* ynAnswer = new char();

仅分配 1 个项目数组。

应该是:

_TCHAR* attString = new _TCHAR[MAX_SIZE];
char* ynAnswer = new char[MAX_SIZE];

MAX_SIZE 必须被定义为宏时。

更好的是使用:

 wstring attString ;
string ynAnswer;

wcin>> attString;
cin>> ynAnswer;

更多的问题是行中的分配:

 argv[1] = new _TCHAR();

除了前面回答的问题,在这一行 argv[1] 中甚至可能不存在。你应该输入到其他缓冲区。

可以这样:

wstring argv1;
if(argc <2){
wcin>>argv1;
}else{
argv1=argv[1];
}

现在使用 argv1 而不是 argv[1]

还有一点:

您正在使用 _TCHAR 作为 WCHAR

当你使用 _TCHAR 时,字符串应该声明为:

_T("一些字符串")

不像:

L“一些字符串”

关于c++ - VS2010 中的堆错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26986957/

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