2016-01-24 84 views
0

我正嘗試讀取其大小我在一個變量L預先存儲關於用C的scanf

因此,舉例來說,如果尺寸爲3個字符的字符串,那麼我想這個閱讀:

fscanf(read,"%.3s",pointer); 

但在這種情況下,我不會知道字符串的大小,正如我前面所說,我存儲在一個變量中的大小。

我試過沒用過任何東西(因爲我沒有意識如何做到這一點)。我不能因爲某些原因而發佈這個問題,如果我不寫這個,我認爲如此忽略這個句子,或者如果你能告訴我我做錯了什麼,那麼繼續。然後我該怎麼做?如何將「%.3s」中的「3」更改爲包含該值的變量?

+2

您可以使用fgets –

回答

1

你可以做,使用與fgets:

char *fgets(char *s, int size, FILE *stream); 

據人:

與fgets()最多有一個小於大小的字符從流 並將它們存儲讀取到緩衝區中指出通過。讀取- 在EOF或換行符後停止。如果讀取換行符,則將其存儲到緩衝區中。終止空字節('\ 0') 存儲在緩衝區中的最後一個字符之後。

代碼示例:

#include <stdio.h> 

int main(void){ 

     int length = 0; 

     puts("Length of the string : "); 
     scanf("%d ", &length); 

     char string[length]; 

     fgets(string,length,stdin); 

     puts(string); 

return 0; 

} 

,或者您可以使用malloc:

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

int main(void){ 

     int length = 0; 
     char *string = NULL; 

     puts("Length of the string : "); 
     scanf("%d ", &length); 

     string = malloc((length+1) * sizeof *string); 

     fgets(string,length,stdin); 

     puts(string); 

     free(string); 

return 0; 

} 
+0

謝謝,我現在明白了怎麼做 – killezio

+0

@ killezio請,接受兩個答案之一,如果我們幫助你,也可以點擊向上按鈕:) –

+0

我該怎麼做接受? – killezio

1

可以動態地生成您傳遞給fscanf格式字符串。例如:

sprintf(fmt, "%%.%ds", n); 

如果n是3,則fmt將包含%.3s例如。然後,您可以將fmt作爲格式參數傳遞給fscanf。當然,您需要爲fmt分配空間,但對於需要的空間量設置一個上限應該很簡單。

+0

感謝您的幫助 – killezio