簡體   English   中英

將文件內容讀取到c中的數組時,將打印多余的字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM