【发布时间】:2015-04-22 03:56:43
【问题描述】:
当我使用 printf 语句获取它时,我的一个变量 dict2Length 返回了一个惊人的 1701996320。尽管我已经注释掉了任何可能增加其价值的东西,但这种情况仍然存在,这使我的困惑更加复杂。它最初被定义为 1。
这是我的代码。篇幅过长,我深表歉意。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <ctype.h>
struct entry
{
char word[15];
char definition[50];
};
void dictionarySort(struct entry dictionary[]) {
int i, j, k, word1, word2, dict2Length = 1;
bool bnf = false;
struct entry dictionary2[100] = {{}};
for (i = 0; i <= strlen(&dictionary->word[0]); i++) {
strcpy(&dictionary2[0].word[i], &dictionary[0].word[i]);
}
i = 0;
word1 = 1;
word2 = 0;
while (isalpha(dictionary[word1].word[0])) {
while (i <= strlen(&dictionary->word[word1])) {
//printf("%c", dictionary[word1].word[i]);
if (dictionary[word1].word[i] == dictionary2[word2].word[i]) {
i++;
bnf = false;
}
else if (dictionary[word1].word[i] < dictionary[word2].word[i]) {
//insert section to prevent back-and-forth cycling
if (bnf == false) {
word2--;
bnf = true;
}
else { //(dictionary[word1].word[i] < dictionary[word2].word[i])
//open up new index by moving everything above up one, insert at word
for (j = dict2Length; j > word2; j--) {
//word
for (k = 0; k <= strlen(&dictionary2->word[0]); k++) {
strcpy(&dictionary2[j+1].word[k], &dictionary2[j].word[k]);
}
//definition
for (k = 0; k <= strlen(&dictionary2->word[0]); k++) {
strcpy(&dictionary2[j+1].definition[k], &dictionary2[j].definition[k]);
}
}
//for (k = 0; k < strlen(&dictionary1->word[word1]))
for (k = 0; k < strlen(dictionary[word1].word); k++) {
strcpy(&dictionary2[word2].word[k], &dictionary[word1].word[k]);
//printf("one\n");
}
for (k = 0; k < strlen(dictionary[word1].definition); k++) {
strcpy(&dictionary2[word2].definition[k], &dictionary[word1].definition[k]);
//printf("two\n");
}
//dict2Length++;
break;
}
}
else {
//insert section to prevent back-and-forth cycling
if (bnf == false) {
word2++;
bnf = true;
}
else { //(dictionary[word1].word[i] < dictionary[word2].word[i])
//open up new index by moving everything above up one, insert at word
for (j = dict2Length; j > word2; j--) {
//word
for (k = 0; k <= strlen(&dictionary2->word[0]); k++) {
strcpy(&dictionary2[j+1].word[k], &dictionary2[j].word[k]);
//printf("%d", word1);
}
//definition
for (k = 0; k <= strlen(&dictionary2->word[0]); k++) {
strcpy(&dictionary2[j+1].definition[k], &dictionary2[j].definition[k]);
//printf("two\n");
//printf("%d", word1);
}
}
for (k = 0; k < strlen(dictionary[word1].word); k++) {
strcpy(&dictionary2[word2].word[k], &dictionary[word1].word[k]);
//printf("three\n");
//printf("%d", word1);
}
for (k = 0; k < strlen(dictionary[word1].definition); k++) {
strcpy(&dictionary2[word2].definition[k], &dictionary[word1].definition[k]);
}
//dict2Length++;
break;
}
}
}
word1++;
}
word2 = 0;
printf("dict2Length = %d", dict2Length);
//for (i = 0; i < dict2Length; i++) {
//printf ("%s\n", dictionary2[i].word);
//}
}
int main (void) {
struct entry dictionary[100] =
{{"aerie", "a high nest"},
{"abyss", "a bottomless pit"},
{"ahoy", "a nautical call of greeting"},
{"addle", "to become confused"},
{"aardvark", "a burrowing African mammal"},
{"agar", "a jelly made of seaweed"},
{"acumen", "mentally sharp; keen"},
{"aigrette", "an ornamental cluster of feathers"},
{"affix", "to attach"},
{"ajar", "partially opened"}};
dictionarySort(dictionary);
}
【问题讨论】:
-
很可能是由于字典2数组溢出导致堆栈损坏
-
同意 samgak。使用调试器。观察 dict2Length,单步执行代码,您可能会找到更改 dict2Length 的代码行。
标签: c string variables structure