Мне не нужно указывать длину массива в программе. Вместо этого I должны принимать входные данные массива (строки) из консоли и динамически I должны выделять память для данного входного массива. Можете ли вы мне помочь. (На языке C)Как инициализировать массив динамически без указания размера массива в C
ответ
Используйте malloc
, чтобы выделить память в куче для вашего массива.
Привет, Спасибо за ответ. – Vamsi
Я написал такой код и получил ошибку сегментации. #include #include
Вы должны пройти зсап указателя, где он может хранить значение : scanf ("% d", &size); – urzeit
Указатель в C может использоваться как массив. Фактически some_pointer[0]
может использоваться вместо *some_pointer
. Поэтому, если вы убедитесь, что some_pointer указывает на область памяти с необходимым размером, вы можете использовать этот указатель так же, как массив. Вы можете использовать malloc
, чтобы получить эту память из диспетчера памяти:
some_type *some_pointer;
some_pointer = (some_type *)malloc(sizeof(some_type) * size_of_your_array);
/* Some code that uses some_pointer[i] with 0 <= i < size_of_your_array */
free(some_pointer);
/* Some code NOT using the pointer */
Обратите внимание на free
в конце кода. Это освободит память. Если вы не использовали этот free
, память будет потребляться во время работы вашей программы (по крайней мере).
Обратите внимание, что информация о размере массива не сохраняется (в отличие от массива, где sizeof может использоваться, поскольку размер массива является частью определения типа).
Нет, массив * не * совпадает с указателем. массив иногда «распадается» на указатель, но они не совпадают. – unwind
@unwind: Не могли бы вы указать разницу между ac-массивом и верным c-указателем? Я думаю, что они на самом деле одинаковы, поскольку существует нет информации о размере, хранящейся в c. – urzeit
@Dayal rai является правильным. – urzeit
E.g.
#include <stdio.h>
#include <stdlib.h>
char *getString(FILE* fp){
char *str;
int ch;
size_t len = 0, size = 16;
str = realloc(NULL, sizeof(char)*size);//size is start size
if(!str)return str;
while(EOF!=(ch=fgetc(fp)) && ch != '\n'){
str[len++]=ch;
if(len==size){
str = realloc(str, sizeof(char)*(size+=16));//expand size
if(!str)return str;
}
}
str[len++]='\0';
return realloc(str, sizeof(char)*len);
}
int main(void){
char *str;
printf("input string : ");
str = getString(stdin);
printf("%s\n", str);
free(str);
return 0;
}
- 1. массива в C++ без указания размера
- 2. Выделить массив без указания размера
- 3. Удалить массив без указания
- 4. Как инициализировать массив неизвестного размера в c
- 5. Как инициализировать массив чем-то в C без цикла?
- 6. Динамически выделять массив неопределенного размера в C
- 7. Как инициализировать char * без определения его размера
- 8. C++ Как инициализировать массив в структуре неизвестного размера
- 9. Инициализировать 2D-массив неизвестного размера с помощью макросов в C
- 10. Как инициализировать массив размера шаблона?
- 11. Как инициализировать массив без ошибок?
- 12. Массив символов в C без фиксированного размера
- 13. Как создать многомерный массив в php без указания индекса
- 14. Есть ли способ инициализировать массив без определения размера
- 15. c массивы: настройка размера динамически?
- 16. Как инициализировать массив переменных размера в классе C++?
- 17. Как инициализировать 2D-массив переменных размера в классе C++?
- 18. Инициализировать элементы массива БЕЗ цикла
- 19. Как инициализировать массив без знака?
- 20. C Инициализировать массив символов массива struct
- 21. Как динамически инициализировать 3d-массив в PHP?
- 22. Ошибка при инициализации массива в VBScript без указания его размера (Подстрочный вне диапазона)
- 23. Как динамически инициализировать массив в объектно-ориентированном C?
- 24. Как инициализировать массив структуры в C++?
- 25. f #: инициализировать массив массива
- 26. Динамически создать и инициализировать массив указателей на структуру в C
- 27. Как динамически размер массива структуры в C
- 28. Как инициализировать массив в c?
- 29. Как инициализировать массив в c?
- 30. Как инициализировать массив в C#?
https://groups.google.com/forum/?fromgroups#!msg/comp.lang.perl/wu0T7a9orc0/3Q4PVIbEzZUJ –
возможно дубликат [динамического распределения памяти и динамического массива] (HTTP: // stackoverflow.com/questions/8481188/dynamic-memory-allocation-and-dynamic-array) –