好的,我的程序的目的是从一个名为orginal.txt的文本文件中读取,其中包含以下格式的名称:
Kyle Butler
Bob Jones
Nathan Moore
程序然后逐个获取这些名称并将其转换为:
Kyle.Butler@emailaddress.com
然后将此地址逐行存储在名为final.txt
的新文本文件中问题是,我无法让它工作,它给我一个分段错误,甚至没有写到final.txt
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void write(char line[100]);
int main()
{
FILE *fp;
fp = fopen("original.txt", "r+");
char line[100];
char mod[30]="@fakeemail.com\n";
while (fgets(line, 100, fp) != NULL){
int i;
for(i=0; i<100; ++i){
if(line[i]==' '){
line[i]='.';
}
if(line[i]=='\n'){
line[i]='\0';
}
strcat(line, mod);
}
FILE *fp2;
fp2 = fopen("final.txt", "a");
if (fp2 != NULL){
fputs(line, fp2);
fclose(fp2);
}
}
fclose(fp);
return 0;
}
答案 0 :(得分:4)
代码有几个问题,但分段错误可能是由for
循环引起的:
for(i=0; i<100; ++i){
if(line[i]==' '){
line[i]='.';
}
if(line[i]=='\n'){
line[i]='\0';
}
strcat(line, mod);
}
每次循环时,您都会将mod
连接到line
。由于您迭代循环100
次而没有其他选项退出循环,并且line
只有100个字符长,很快您就会将line
的第100个字符写入其他字符记忆的一部分。
答案 1 :(得分:0)
建议的更改:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100 /* Somehow parameterize "100" */
void write(char line[100]);
int main()
{
FILE *fp;
fp = fopen("original.txt", "r+");
if (!fp) { /* Check for error */
perror ("open failed");
return 1;
}
char line[MAXLEN];
/* You don't need hard-coded array length with a static string */
char *mod="@fakeemail.com\n";
while (fgets(line, MAXLEN, fp) != NULL){
int i;
/* You don't need to iterate through more characters than the string contains */
for(i=0; i<strlen(line); ++i){
if(line[i]==' '){
line[i]='.';
}
if(line[i]=='\n'){
line[i]='\0';
}
}
/* Move this OUTSIDE of your for loop */
strcat(line, mod);
/* Append to the output file */
FILE *fp2;
fp2 = fopen("final.txt", "a");
/* You're checking for error: good! */
if (fp2 != NULL){
fputs(line, fp2);
fclose(fp2);
}
}
fclose(fp);
return 0;
}
答案 2 :(得分:-1)
正如mbratch写道,你在行数组中写出超过100个字符。这是一个有效的代码:
void write(char line[100]);
int main()
{
FILE *fp;
fp = fopen("original.txt", "r+");
char line[100];
char mod[30]="fakeemail.com\n";
while (fgets(line, 100, fp) != NULL){
int i;
for(i=0; i<100; ++i){
if(line[i]==' '){
line[i]='.';
}
if(line[i]=='\n'){
line[i]='@'; strcat(line, mod);
line[i+strlen(mod)]='\0';
}
}
FILE *fp2;
fp2 = fopen("final.txt", "a");
if (fp2 != NULL){
//fputs(line, fp2); printf("%s\n",line);
fprintf(fp2,"%s\n",line);
fclose(fp2);
}
}
fclose(fp);
return 0;
}