我想逐行阅读inputtext.txt并反转每一行中的单词顺序并将其打印出来(输入:hello world,输出:world hello)。有了这段代码,我的输出全部混乱了,我收到了运行时错误2,指出数组“字符串”周围的堆栈已损坏。我尝试在每次while循环迭代之后将字符串重置为null,但仍然遇到相同的错误。是否有人建议消除运行时错误或帮助代码更平稳地运行?
int main() {
FILE *inp,*outp; //file input and output
int i,wordcount; //define counter variables
int k = 0,j=0;
char string[200]; //define string to scan sentence into
char words[20][20]; //2D string for each word in the sentence
inp = fopen("inputtext.txt", "r");
outp = fopen("output.txt", "w");
if (inp == NULL) {
printf("File not found.\n");
}
else {
while (!feof(inp)) {
fgets(string, 1000, inp);
printf("GOT SENTENCE\n");
for (i = 0; string[i] != '\0'; i++) {
if (string[i] == ' ') {
words[k][j] = '\0';
k++;
j = 0;
}
else
{
words[k][j] = string[i];
j++;
}
}
words[k][j] = '\0';
wordcount = k;
for (i = wordcount; i >= 0; i--) {
printf("%s ", words[i]);
}
printf("\n\n");
}
}
return 0;
}
答案 0 :(得分:0)
以下建议的代码:
stderr
strlen()
被调用的次数现在,建议的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *inp,*outp; //file input and output
int wordcount; //define counter variables
int k = 0;
int j = 0;
char string[200]; //define string to scan sentence into
char words[20][20]; //2D string for each word in the sentence
inp = fopen("inputtext.txt", "r");
if( !inp )
{
perror( "fopen to read: inputtext.txt failed" );
exit( EXIT_FAILURE );
}
outp = fopen("output.txt", "w");
if( !outp )
{
perror( "fopen to write: output.txt failed" );
// cleanup
fclose( inp );
exit( EXIT_FAILURE );
}
size_t strLength = strlen( string );
for (size_t i = 0; i < strLength; i++)
{
// remove any trailing newline
string[ strspn( string, "\n" ) ] = '\0';
printf("GOT SENTENCE\n");
for (size_t i = 0; i < strlen(string); i++)
{
if (string[i] == ' ')
{
words[k][j] = '\0';
k++;
j = 0;
}
else
{
words[k][j] = string[i];
j++;
}
}
words[k][j] = '\0';
wordcount = k;
for ( int i = wordcount; i >= 0; i--)
{
printf("%s ", words[i]);
fprintf( outp, "%s ", words[i] );
}
printf("\n\n");
fprintf( outp, "\n" );
}
return 0;
}