如何分配初始內存,並增加每個用戶輸入的內存,以獲取已知列數的字符串數組。例如: :`char * type [20]; 我想爲它分配初始內存並增加每個scanf(「%s」,類型[i])的空間;這是在循環中。 你能否請我幫我字符串數組的分配內存
1
A
回答
0
數組是一個連續的內存塊,當你聲明一個特定類型的數組時,你不能再增大或減小它的大小。
一個辦法是爲你申報焦炭的合理的大尺寸數組來保存你的「弦」。像這樣:
const int size=256;
char input[size]; //declares an array of 256 chars
爲在焦炭的arary輸入實際的「串」,你可以使用scanf函數,但我建議你用fgets,因爲它是更安全。
while(fgets(input, size, stdin)!=NULL)
{
//do something with input
}
這種做法容易受到緩衝區溢出不一定是安全的,但通常的做法仍然
爲你們的問題「字符串數組」,要動態地分配一切。 (如果您動態分配一個char **,使其指向堆棧分配的char []你所要求的大的時間麻煩)
你應該使用一個默認的大小爲您的char **(說參加1000字符* )併爲每個char *使用默認分配大小,例如256 * sizeof(char)字節。
這種方式,你可以使用realloc的每次用盡你的時空。
0
每次需要讀取新字符串時,都可以使用在標頭<stdlib.h>
中聲明的標準函數realloc
。
這裏一個示範程序,而不是讀取字符串只是複製他們
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
char (*s)[20] = NULL;
char (*p)[20] = NULL;
size_t n = 0;
do
{
p = realloc(s, (n + 1) * sizeof(*s));
if (p)
{
s = p;
strcpy(s[n], (char[]){ 'A' + n, '\0'});
++n;
}
} while (p && n < 10);
for (size_t i = 0; i < n; i++ ) puts(s[i]);
free(s);
}
固定數量的程序輸出是
A
B
C
D
E
F
G
H
I
J
注重功能如何realloc
使用。
如果知道串的個數不能小於某個常數,那麼您可以最初分配動態等於這個恆定大小的陣列。
例如
#define MIN_SIZE 10
//...
char (*s)[20] = malloc(MIN_SIZE * sizeof(*s));
+0
你說得對,我是在錯誤的地方從手機上打字。無論如何,原創作者編輯嗨的答案同時。對於那個很抱歉 :)) – Michi
1
您可以使用動態分配的內存是
char *read_string(void)
{
int c;
int i = 0;
char *s = malloc(1);
printf("Enter a string: \t"); // It can be of any length
/* Read characters until found an EOF or newline character. */
while((c = getchar()) != '\n' && c != EOF)
{
s[i++] = c;
s = realloc(s, i+1); // Add memory space for another character to be read.
}
s[i] = '\0'; // Nul terminate the string
return s;
}
int main(void)
{
char* type[20];
for(size_t i = 0; i < sizeof(type); i++)
type[i] = read_string();
// Do some other stuff
}
不要忘了,當你用它做釋放內存。
相關問題
- 1. 分配內存到字符串數組
- 2. 字符串內存分配
- 3. 分配的內存字符數組
- 4. 瞭解字符數組內存分配
- 5. 要分配給字符串數組的內存量?
- 6. C,爲結構數組中的字符串分配內存
- 7. 分配字符串數組
- 8. 指針數組並動態分配內存字符串
- 9. 動態內存/重新分配字符串數組
- 10. 分配新的字符數組時發生內存泄漏(c字符串)
- 11. C字符串內存分配隱式?
- 12. 爲字符串動態內存分配
- 13. 如何爲字符串分配內存?
- 14. 字符串內存分配和字符串池概念
- 15. 動態分配的字符串數組
- 16. 將字符串的值分配給字符串數組
- 17. 我想分配字符串數組的字符串值
- 18. 字符內存分配
- 19. 讀取字符串的字符時出錯。分配內存
- 20. C - 數組的字符串(二維數組)和內存分配讓我不想要的字符
- 21. 分配雙字符串數組
- 22. 動態分配字符串數組
- 23. VB - 在數組中分配字符串
- 24. 重新分配字符串數組
- 25. objective-c:分配變量而不是字符串內的數組
- 26. 字符串的動態內存分配函數,直到換行
- 27. 字符串數組匹配字符串
- 28. 在C中重新分配字符串數組並分配新字符串
- 29. C++中字符數組的內存分配
- 30. 將數組的內存分配給字符指針
提示:動態內存和'realloc'。 – emlai
我剛剛回答了[與此非常相似的問題](http://stackoverflow.com/questions/34353204/how-do-i-make-this-function-take-arbitrary-strings),並愉快地(爲你)爲您的問題提供了完整的解決方案。 –