所以基本上当我用GCC编译器编译代码时,我没有得到任何错误或警告,但是当我输入第一段数据时,它说:
Bus error: 10.
我不确定我做错了什么。我认为这个问题来自void anagramGrouping
(最后一个函数)。我还包括其余代码以帮助遵循逻辑。
#include <stdio.h>
#include <string.h>
#define Row 2
#define col 20
int wordCount = 0;
int groupCount = 0;
char wordList[Row][col];
char group[Row][col];
// this is where prototypes go
void sortword(char word[col]);
void anagramGrouping(char word[col], char copy[col]);
void resetGroup();
int main() {
int i; // used in for loop to 'get' the strings
char word[col];
resetGroup();
for (i = 0; i < Row; i++) {
scanf("%s", word);
sortword(word);
wordCount++;
}
}
void resetGroup() {
int i;
for (i = 0; i < Row; i++)
strcpy(group[i], " ");
}
void sortword(char word[col]) {
int i = 0;
char temp;
char copy[col]; // used to store a copy of the original word
strcpy(copy, word);
while (word[i] != '\0') {
int j = i + 1;
while (word[j] != '\0') {
if (word[j] < word[i]) {
temp = word[i];
word[i] = word[j];
word[j] = temp;
}
j++;
}
i++;
}
anagramGrouping(word,copy);
}
void anagramGrouping(char word[col], char copy[col]) {
int n;
if (wordCount == 0) {
strcpy(group[0], copy);
}
for (n = 0; n <= groupCount; n++) {
if (strcmp(group[n], word) == 0) {
strcpy(group[n], copy);
} else {
groupCount++;
strcpy(group[groupCount], copy);
}
}
}
答案 0 :(得分:-1)
对于初学者,请更改所有
sortword (char word[col])
到
sortword (char *word)
和所有
anagramGrouping (char word[col], char copy[col])
到
anagramGrouping (char *word, char *copy)
当您传递char copy[col]
时,您传递的是character array
,当作为函数参数传递时,会转换为指针。 (你会听到短语“衰变到一个指针”,这不完全正确,但经常被用来表示同样的事情)。这不是导致bus error
的问题,但会使您的代码更具可读性。
接下来,您的bus error
通常是由于滥用指针值而导致该值超出程序允许的内存范围,通常位于 system 区域导致bus error
。查看代码,很难分清哪些问题可能是确切的原因。然而,可能的罪魁祸首是:
for(n=0; n <= groupCount; n++)
{
if ( strcmp(group[n],word) ==0 )
{
strcpy(group[n],copy);
}
else
{
groupCount++;
strcpy(group[groupCount],copy);
}
}
在运行调试器的情况下,您会很快发现groupCount
远远超过1
,导致strcpy(group[groupCount],copy)
超出char group[Row][col];
的末尾。允许的行值限制为0-1
的{{1}}。
要将副本限制在允许的范围内,请将循环条件更改为:
#define Row 2
进一步清理代码可能如下所示:
for (n = 0; n < Row; n++) {
如果您有任何问题,请与我们联系。