我把文本从编辑域下载到缓冲区,我想把它转换成一个字符串数组。每个字符串都以%
结尾。
void Converter(HWND hwnd)
{
int Length = GetWindowTextLength(hEdit) + 1;
LPSTR data = (LPSTR)malloc(Length);
char set[500][11];
GetWindowTextA(hEdit, data, Length);
int x = 0, y = 0;
char record[10];
for (int i = 0; i < Length, x<500; i++)
{
if(data[i]!= '\0' )
{
record[y] = data[i];
y++;
}
else if(data[i] == '%')
{
strcpy(set[x], record);
x++;
y = 0;
}
}
free(data);
}
我收到的错误消息:
Exception thrown at location 0x00007FF684C91F9B in myproject.exe: 0xC0000005: Access violation while reading at location 0x000000CBFC8D5DAF.
3条答案
按热度按时间zvms9eto1#
问题就出在这一行
你的条件不对,应该是:
此外,
else if
区块永远不会执行,因为'%'不相等'\0'。这可以透过交换它们来修正。第三个问题是%分隔字符串的最后一个单词不会被复制到
set
中,因为它后面没有百分号。还有一个bug。你在复制之前忘记在记录的末尾放一个空终止符,这会导致较短的字符串保留以前的字母。
在这一点上,我建议使用
<string.h>
中的strtok
,以及像Rust这样的内存安全编程语言。hmmo2u0o2#
你可以这样做
zd287kbt3#
使用示例代码显示带2D数组的strcpy:
输出量: