簡體   English   中英

安全讀取長度未知的字符串

[英]Safely reading in strings of unknown length

我正在嘗試使用fgets安全地獲取未知長度的字符串

到目前為止,這是我一直能想到的代碼,但是現在我仍然堅持如何繼續前進。

#include <stdio.h>
#include <stdlib.h> 
#include <string.h> 
#include <assert.h> 

#define DEFLEN 4 
#define CHUNKSZ 2 


int i = 0;
int size =0;
int size2 =0;
char* ln1;
char* ln2;
FILE *fpin;
char *getStrFromFile( FILE *fpins  )/*file stream to read string from */
 {

 DEFLEN = malloc( CHUNKSZ *sizeof(int));
 while(1){
  if( fgets(ln1+size2, DEFLEN, fpin) == NULL) {
    if(size > 0){
     return (ln1);
    }
    else {
      return (NULL);
      free(ln1);
    }
  }
 else{
   size2=strlen(ln1);
   if(ln1[size2 -1] == '\n'){
     return (ln1);
   }
    else{
     ln2=malloc(size+CHUNKSZ * sizeof(char));
     assert(ln2);
     strcpy(ln2, ln1);
     free (ln1);
     ln1 = ln2;
     return (ln1);
    }
   }
}

我也收到DEFLEN = malloc行的錯誤

錯誤:左值必須作為賦值的左操作數

預編譯器使用代碼中的DEFINE。 因此,您不能為定義分配任何內容!

這條線

DEFLEN = malloc( CHUNKSZ *sizeof(int));

被蜜蜂取代

4 = malloc( CHUNKSZ *sizeof(int));

您不能重新分配DEFLEN 它是一個占位符,會在編譯前被替換,並且它在替換值之外的存在在運行時消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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