【发布时间】:2017-02-26 18:14:28
【问题描述】:
我想做的是: 输入来自用户的句子。使用句号、空格和逗号作为单词分隔符。每个单词都应该存储在一个 2D 数组中,其列的大小各不相同,每一行都将一个单词存储为一个以 NULL 结尾的字符串。
例如,如果用户输入:
Hello how are you?
它应该存储为:
H E l l o NULL
h o w NULL
a r e NULL
y o u ? NULL
所以每当我尝试运行我的代码时,都会出现此错误
Exception thrown at 0x00832605 in Project109.exe: 0xC0000005: Access violation writing location 0xFDFDFE03.
或者程序停止工作。主要问题在ptr[i][j] = str1[j];
`
char str1[20];
cin.get(str1, 20);
int len, sum = 0;
len = strlen(str1);
int i = 0;
while (str1[i] != '\0')
{
if (str1[i] == ' ' || str1[i] == '.' || str1[i] == ',' || str1[i] == '?' || str1[i] == ';')
{
sum = sum + 1;
}
i++;
}
char **ptr;
ptr = new char*[sum];
for (int i = 0; i < sum; i++)
{
ptr[i] = new char[20];
}
for (int i = 0; i < sum; i++)
{
for (int j = 0; j < 20; j++)
{
ptr[i][j] = '\0';
}}
for (int i = 0; i < sum; i++)
{
for (int j = 0; j < 20; j++)
{
if (str1[j] == ' ' || str1[j] == '.' || str1[j] == ',' || str1[j] == '?' || str1[j] == ';')
{
i++;
}
else
{
ptr[i][j] = str1[j];
}
}
}
for (int i = 0; i < sum; i++)
{
int j = 0;
while (ptr[i][j] != '\0')
{
cout << ptr[i][j];
j++;
}
}
for (int i = 0; i < sum; i++)
{
delete[] ptr[i];
}
delete[] ptr;
system("pause");
return 0;}
`
【问题讨论】:
-
我已经提到了编译器指向的地方:ptr[i][j] = str1[j];
-
@HamzaSaeed:嗯,那行代码大错特错。在您的示例中,
w是str1[8],应该以ptr[1][2]结尾,但j不可能同时是8和2。 -
我从代码中删除了空初始化。现在它可以工作了,但会显示带有其他角色的垃圾......
标签: c++ arrays pointers visual-c++