[英]extra characters are printed when file contents are read into a array in c
我只想讀取一個文件並將其存儲在數組中。 我嘗試了以下代碼
#include<stdio.h>
#include<string.h>
#include<fcntl.h>
int main()
{
int fd;
char buffer[500];
fd=open("input.txt",O_RDONLY);
read(fd,buffer,500);
printf("\nTHE FILE CONTENTS ARE:\n%s",buffer);
}
input.txt包含:
COPY START 0000
FIRST STL RETADR
CLOOP JSUB RDREC
LDA LENGTH
COMP #0
JEQ ENDFIL
JSUB WRREC
J CLOOP
ENDFIL LDA =C'EOF'
STA BUFFER
LDA #3
STA LENGTH
JSUB WRREC
J @RETADR
USE CDATA
RETADR RESW 1
LENGTH RESW
USE CBLKS
BUFFER RESB 4096
BUFEND EQU *
MAXLEN EQU BUFEND-BUFFER
當我打印時,最后我得到了額外的字符。
我得到的終點線是
麥克倫(Maxlen)EQU BUFEND-BUFFER
這是為什么?如何解決?
您的代碼中有緩沖區溢出。 您填充了char buffer[500];
該參數包含文件中的500個字符,但隨后使用%s
printf
它,它期望一個以零結尾的字符串。 但是buffer
不以零結尾,因此printf
將嘗試讀取buffer[500]
, buffer[501]
等,直到找到零終結符( '\\0'
)。
我建議您將buffer
定義為501個字符長,用500個字符填充,並將buffer[500]
設置為'\\0'
以便printf
不會嘗試讀取過去的buffer[500]
。
編輯:實際上只打印從文件讀取的內容,您應該檢查read
調用的返回值,並將'\\0'
字符放在寫入buffer
最后一個字符旁邊,例如:
int fd;
char buffer[501];
fd = open("input.txt", O_RDONLY);
const ssize_t r = read(fd, buffer, 500);
if (r < 0) {
// Handle error
} else {
buffer[r] = '\0';
printf("\nTHE FILE CONTENTS ARE:\n%s",buffer);
}
請參閱手冊頁read
更多的信息( man 3p read
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.