過去2日間これに取り組んできましたが、問題を理解できないようです。
ファイルから読み取り、文字配列に文字列として保存していますが、文字strlen()
列を使用しようとすると、セグメンテーション違反でクラッシュします。
これが私がやっていることです。
char read_string[25];
fscanf(file, "%s", &read_string);
int length = strlen(read_string);
別の問題は、の内容を別の char 配列にコピーするread_string
と、最後にランダムな文字が追加されることです。
これが私がやっていることです
char input[25];
for(i=0; i<25; i++)
{
if (read_string[i] == '.')
break;
else
input[i] = read_string[i];
}
ピリオドが文字列として入力配列に読み込まれる前に、すべてをコピーする必要があります。
PSfscanf()
ファイルが適切に構造化されているため、使用しています。
必要に応じて、ここに私のコードがあります。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
//variables
FILE *rFile;
int num_states; //number of states
int num_alphabet; //number of alphabets
int num_acstates; //number of accepting states
int ac_state; //the accepting state
char alphabet[num_alphabet]; //alphabet
char read_string[25]; //assuming the input will be maximum of 25 character
char input[25];
int i,j,x; //indexes for the loop
//open the file to read
rFile = fopen("dfa11", "r");
if (rFile != NULL)
{
//do the program here
//read number of states and number of alphabets
fscanf(rFile, "%d %d", &num_states, &num_alphabet);
//read the alphabet
fscanf(rFile, "%s", &alphabet);
//read the state transition table (matrix)
int value = num_states*num_alphabet;
char table[num_states][num_alphabet];
for(i=0; i<num_states; i++)
{
for(j=0; j<num_alphabet; j++)
{
fscanf(rFile, "%d", &table[i][j]);
}
}
//read number of accepting states and accepting state
fscanf(rFile, "%d", &num_acstates);
fscanf(rFile, "%d", &ac_state);
//read the input string from the file
fscanf(rFile, "%s", &read_string);
for(i=0; i<25; i++)
{
if (read_string[i] == '.')
break;
else
input[i] = read_string[i];
}
//strncpy(input, read_string, j);
printf("%d\n", strlen(read_string));
printf("%d\n", strlen(input));
printf("%s\n", read_string);
printf("%s\n", input);
//close the file
fclose(rFile);
}
else
{
printf("File could not be found");
}
}