我的英语不是很好。
所以在我的程序中,我想将存在于 txt 文件中的文本复制到数组中。
typedef struct Chaine
{
char * Lachaine;
int Taille_C;
} Chaine ;
int main (void)
{
Chaine *Tab_Texte=NULL;
Tab_Texte=(Chaine*)malloc(sizeof(Chaine));
FILE* Texte= NULL;
Texte = fopen("chaines", "r");
fseek(Texte, 0, SEEK_END);
Tab_Texte->Taille_C=ftell(Texte);
fseek(Texte, 0, SEEK_SET);
Tab_Texte->Lachaine=NULL;
Tab_Texte->Lachaine=(char*)malloc(sizeof(char)*Tab_Texte->Taille_C);
fread(Tab_Texte->Lachaine,sizeof(char)*(Tab_Texte->Taille_C),1,Texte);
printf("%s",Tab_Texte->Lachaine);
return 0;
}
这里一切正常,当我改变时
Tab_Texte->Lachaine=(char*)malloc(sizeof(char)*Tab_Texte->Taille_C);
与(例如)
Tab_Texte->Lachaine=(char*)malloc(sizeof(char)*Tab_Texte->Taille_C - 10);
它总是有效,它应该向我显示段错误,因为 sizeof(char)*Tab_Texte->Taille_C - 10
比 sizeof(char)*Tab_Texte->Taille_C
比文件中的文本要多。
你能告诉我为什么它总是有效吗?
最佳答案
您遇到的是 undefined behavior .
- 访问超过分配的内存
- 使用非空终止字符数组作为字符串
- 提供无效的文件指针
所有 [any] 这些都会导致未定义的行为,副作用可能是段错误,但不能保证。
请
- 在使用返回指针之前检查
fopen()
是否成功 - 以 null 终止一个 char 数组以将其用作字符串
free()
使用结束后分配的内存。- 不要转换
malloc()
/calloc()
的返回值。
关于c - 访问越界内存时没有段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27730460/