**Source.c**
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#define SIZE 80
#define SPACE ' '
extern int isVowel(char);
extern void initialiseString(char[]);
extern int copyString(char[], char[], int);
int main() {
char originalText[SIZE] = {'\0'};
char piglatinText[SIZE] = {'\0'};
char firstChar[SIZE];
int i, j, k, l, wordCount;
wordCount = 1;
i = j = k = l = 0;
printf("Enter the text for which you want to generate the piglatin\n");
gets(originalText);
while (originalText[i] != NULL) {
if (originalText[i] == SPACE) {
if (originalText[i + 1] != SPACE) {
wordCount++;
}
}
i++;
}
printf("Total words in the string are %i\n", wordCount);
// piglatin Generator
for (i = 0; i < wordCount; i++) {
initialiseString(firstChar);
l = 0;
while (!isVowel(originalText[j]) && (originalText[j] != SPACE) && (originalText[j] != NULL)) {
firstChar[l++] = originalText[j++];
}
if (isVowel(originalText[j])) {
while ((originalText[j] != SPACE) && (originalText[j] != NULL)) {
piglatinText[k++] = originalText[j++];
}
k = copyString(piglatinText, firstChar, k);
} else {
firstChar[l] = '\0';
k = copyString(piglatinText, firstChar, k);
}
piglatinText[k++] = 'a';
piglatinText[k++] = ' ';
j++;
}
printf("The piglatin text\n");
puts(piglatinText);
getch();
return EXIT_SUCCESS;
}
Functions.c
#include <string.h>
int isVowel(char ch) {
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') {
return 1;
}
return 0;
}
void initialiseString(char string[]) {
int i;
int len;
len = strlen(string);
i = 0;
while (i <= len) {
string[i++] = '\0';
}
return;
}
int copyString(char stringOne[], char stringTwo[], int k) {
int i;
int len;
len = strlen(stringTwo);
i = 0;
while (len > 0) {
stringOne[k++] = stringTwo[i++];
len--;
}
return k;
}
这里的main函数出现在Source.c文件中,Source.c文件中使用的所有函数都在Functions.c文件中定义。
每当我运行此代码时,originalText都会被正确编码,但最终会生成错误堆栈变量'PiglatinText'已损坏!我试图通过调试找到错误,但无法找到错误源。
答案 0 :(得分:1)
要向void initialiseString(char string[])
函数传递未初始化的数组firstChar[SIZE]
。在该功能中,您正在使用strlen()
在那个阵列上。这将导致未定义的行为。
很可能这个函数给你一个错误的长度,并且基于你错误地初始化它。这可能会导致堆栈在进一步处理时出现损坏。
您应该首先使用空字符初始化firstChar[SIZE]
,就像使用其他数组一样。
// piglatin Generator
for (i = 0; i < wordCount; i++) {
initialiseString(firstChar); //<-- For first iteration of for loop this will cause problem as 'firstChar' is not initialized.
l = 0;