두 문자열을 C 프로그래밍으로 결합하는 데 어려움이 있습니다. 명령 줄 매개 변수에서 입력 파일 이름을 가져올 수 있으며 출력 파일 이름에 .out
을 추가 할 수 있기를 원합니다. 새 이름을 파일로 저장합니다. 예 : Test1.txt
->Test1.txt.out
C 프로그래밍에서 두 문자열을 하나로 결합하십시오.
아래 코드는 알 수없는 이유로 분류 오류를 생성합니다. 전체 코드
int main(int argc, char** argv)
{
char fileName_Out[200];
Consortium *con1;
int i;
for(i=0; i<argc; i++)
{
strcpy(fileName_Out, argv[i]);
strcat(fileName_Out, ".out");
con1 = readConsortium (argv[i]);
writeNetWorth (fileName_Out, con1);
}
free(con1->core);
free(con1->associate);
free(con1);
con1->core = NULL;
con1->associate = NULL;
con1 = NULL;
return 0;
}
업데이트 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char code[4];
float sharePrice;
int shares;
float assetValue;
float debts;
} Company;
typedef struct {
int numCore;
int numAss;
Company* core;
Company* associate;
} Consortium;
Consortium *readConsortium (char* fileName) {
Consortium *con1 = (Consortium*)malloc(sizeof(Consortium));
int i;
FILE *source_f = fopen(fileName, "r");
if(source_f == NULL)
{
con1 = NULL;
} else {
fscanf(source_f, "%d %d", &(con1->numCore), &(con1->numAss));
con1->core = (Company*)malloc(sizeof(Company)*(con1->numCore));
con1->associate = (Company*)malloc(sizeof(Company)*(con1->numAss));
for(i = 0; i < con1->numCore; i++)
{
fscanf(source_f, "%s %f %d %f %f", con1->core[i].code, &con1->core[i].sharePrice, &con1->core[i].shares, &con1->core[i].assetValue, &con1->core[i].debts);
}
for(i = 0; i < con1->numAss; i++)
{
fscanf(source_f, "%s %f %d %f %f", con1->associate[i].code, &con1->associate[i].sharePrice, &con1->associate[i].shares, &con1->associate[i].assetValue, &con1->associate[i].debts);
}
}
fclose(source_f);
return con1;
}
void writeNetWorth (char* fileName_Out, Consortium *con)
{
int i;
float netWorth;
FILE* target_f = fopen(fileName_Out, "w");
for(i = 0; i < con->numCore; i++)
{
netWorth = (con->core[i].sharePrice * con->core[i].shares) + con->core[i].assetValue - con->core[i].debts;
fprintf(target_f, "%s:%12.2f\n", con->core[i].code, netWorth);
}
for(i = 0; i < con->numAss; i++)
{
netWorth = (con->associate[i].sharePrice * con->associate[i].shares) + con->associate[i].assetValue - con->associate[i].debts;
fprintf(target_f, "%s:%12.2f\n", con->associate[i].code, netWorth);
}
fclose(target_f);
}
/* int main(void)
{
char fileName[200];
char fileName_Out[200];
Consortium *con2;
scanf("%s %s", fileName, fileName_Out);
con2 = readConsortium (fileName);
writeNetWorth (fileName_Out, con2);
free(con2->core);
free(con2->associate);
free(con2);
con2->core = NULL;
con2->associate = NULL;
con2 = NULL;
return 0;
}*/
int main(int argc, char** argv)
{
char fileName_Out[200];
Consortium *con1;
int i;
for(i=1; i<(argc+1); i++)
{
strcpy(fileName_Out, argv[i]);
strcat(fileName_Out, ".out");
con1 = readConsortium (argv[i]);
writeNetWorth (fileName_Out, con1);
}
free(con1->core);
free(con1->associate);
free(con1);
con1 = NULL;
return 0;
}
'gdb'를 사용하여 충돌이 발생한 위치와 이유를 파악합니다. – Rohan
'con1'은 자유로 웠던 후에'->'를 통해 접근합니다. 그러지 마세요.그냥 'con1 = NULL;'이면 충분합니다. –
argv [0]는 프로그램의 이름이므로 아마 argv [1]로 시작하고 싶을 것입니다. – JS1