gpt4 book ai didi

c - 使用 strlen 时出现段错误

转载 作者:行者123 更新时间:2023-12-02 07:46:44 28 4
gpt4 key购买 nike

过去两天我一直在研究这个问题,但似乎无法找出问题所在。

我正在从文件中读取并将其作为字符串保存到 char 数组中,但是当我尝试在字符串上使用 strlen() 时,它会因段错误而崩溃。

这就是我正在做的事情。

char read_string[25];
fscanf(file, "%s", &read_string);
int length = strlen(read_string);

另一个问题是,当我将 read_string 的内容复制到另一个字符数组中时,它会在末尾添加随机字符。

这就是我正在做的事情

char input[25];
for(i=0; i<25; i++)
{
if (read_string[i] == '.')
break;
else
input[i] = read_string[i];
}

我需要在将句点字符串读入输入数组之前复制所有内容。

附注我使用 fscanf() 因为该文件结构良好。

如果需要的话,这是我的代码。

#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");
}
}

最佳答案

Im reading from a file and saving it into the char array as a string but when i try using stelen on the string, it crashes with a segmentation fault.

您不需要在 fscanf 中获取 read_string 的地址,因为 read_string 已经衰减为指针。无论如何,由于 &read_string == read_string 在数组的情况下(类型除外),它不应该导致段错误。

因此问题来自其他地方。其中,请检查文件中的行是否不超过 25 个字符。

Another problem is when i copy contents of read_string into another char array, it adds radom characters at the end.

不要忘记在字符串末尾添加 '\0'

input[i] = '\0';

关于c - 使用 strlen 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417667/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com