고정 된 길이의 항목이나 문자가 없을 때 문자열 배열을 만드는 방법. 저는 포인터와 C를 처음 접했을뿐입니다. 여기에 게시 된 다른 솔루션을 이해할 수 없으므로 아래에 내 솔루션이 게시되어 있습니다. 바라건대 다른 사람들을 돕기를 바랍니다.malloc을 사용하여 C에서 문자열의 동적 배열을 만드는 방법
답변
단순히 argv 항목 표시 줄에서 첫 번째 항목의 배열을 만듭니다.
char **dirs = NULL;
int count = 0;
for(int i=1; i<argc; i++)
{
int arraySize = (count+1)*sizeof(char*);
dirs = realloc(dirs,arraySize);
if(dirs==NULL){
fprintf(stderr,"Realloc unsuccessful");
exit(EXIT_FAILURE);
}
int stringSize = strlen(argv[i])+1;
dirs[count] = malloc(stringSize);
if(dirs[count]==NULL){
fprintf(stderr,"Malloc unsuccessful");
exit(EXIT_FAILURE);
}
strcpy(dirs[count], argv[i]);
count++;
}
int arraySize = (count + 1) * sizeof (dirs);를 int 배열 크기 = (count + 1) * sizeof (char *);로 변경해야합니다. 의미 상으로, 당신의 코드는'dirs'가'char ** '이지만'char *'를 할당하기 때문에 조금 부정확합니다. 실용적인 측면에서,'sizeof (char **) == sizeof (char *)'이후로 어떤 방법 으로든 차이를 만들어서는 안된다. –
당신이 바로 그것을 편집했기 때문에 dirs가 포인터 배열이기 때문에 더 의미가 있습니다 –
네가 너무 가깝지만 주 배열을 너무 많이 할당하고있다.
char **dirs = NULL;
int count = 0;
dirs = malloc(sizeof(char*) * (argc - 1));
if(dirs==NULL){
fprintf(stderr,"Char* malloc unsuccessful");
exit(EXIT_FAILURE);
}
for(int i=1; i<argc; i++)
{
int stringSize = strlen(argv[i])+1;
dirs[count] = malloc(stringSize);
if(dirs[count]==NULL){
fprintf(stderr,"Char malloc unsuccessful");
exit(EXIT_FAILURE);
}
strcpy(dirs[count], argv[i]);
count++;
}
네, 이것이 argv의 경우에 더 적절할 것입니다. 나는 어떻게 argv를 사용하고 있는지 보여주기 위해 예제로 사용했습니다. 만약 우리가 argc을 모른다면 –
char **twod_array = NULL;
void allocate_2darray(char ***source, int number_of_slots, int length_of_each_slot)
{
int i = 0;
source = malloc(sizeof(char *) * number_of_slots);
if(source == NULL) { perror("Memory full!"); exit(EXIT_FAILURE);}
for(i = 0; i < no_of_slots; i++){
source[i] = malloc(sizeof(char) * length_of_each_slot);
if(source[i] == NULL) { perror("Memory full!"); exit(EXIT_FAILURE);}
}
}
// 샘플 프로그램
int main(void) {
allocate_2darray(&twod_array, 10, 250); /*allocate 10 arrays of 250 characters each*/
return 0;
}
'alloc'_2darray 함수가 반환 될 때'source' 포인터가 사라질 것입니다. 인수 유형을'char ***'로 변경하고'& twod_array'로 전달해야합니다. 또한 균일 한 크기의 배열을 할당하기 때문에 각 문자열의 길이가 크게 다를 수있는 경우이 솔루션은별로 좋지 않습니다. –
길이를 다양하게 realloc했습니다. 내가 잃어버린 소스 포인터를 이해하지, 당신은 포인터를 전달하고있어. –
예, 값으로 포인터를 전달 중입니다. 원래 포인터가 수정되지 않습니다. 'twod_array'는 함수가 리턴 된 후'NULL'이됩니다. 포인터 자체에 대한 포인터를 전달해야하므로 'char ***'입니다. 나는 그것이 혼란 스럽다는 것을 안다. –
- 1. C에서 1 차원 동적 배열을 만드는 방법 #?
- 2. 동적 배열을 만드는 방법
- 3. 동적 CGPoint ** 배열을 만드는 방법
- 4. 구조체 C에서 정보를 사용하여 2 차원 배열을 만드는 방법
- 5. 3 차원 동적 배열을 만드는 방법
- 6. c에서 동적 배열에 포인터를 비움
- 7. C에서 연결된 목록 노드의 동적 배열을 만드는 방법은 무엇입니까?
- 8. 클래스에서 단일 속성의 동적 배열을 만드는 방법
- 9. C에서 배열을 필터링하는 방법?
- 10. malloc을 사용하지 않고 함수에서 배열을 반환하려면 어떻게해야합니까?
- 11. 이 항목 집합을 사용하여 동적 배열을 만드는 방법
- 12. C에서 문자열의 NULL로 끝나는 배열을 초기화하는 올바른 방법
- 13. C에서 문자열의 문자 바꾸기
- 14. C : malloc을 사용하여 배열 확장하기
- 15. C에서 나무 구조를 만드는 방법
- 16. Guard Malloc을 활성화하는 방법
- 17. C에서 malloc을 사용하여 typedef 유형에 대한 공간 할당
- 18. C에서 문자 배열을 사용하여 작업
- 19. 동적 배열을 생성하는 방법
- 20. 객관적인 C에서 CGFloat의 배열을 만드는 방법은 무엇입니까?
- 21. C에서 xml 파일을 사용하여 데이터베이스를 만드는 방법 #
- 22. C에서 스레드를 사용하여 임시 파일을 만드는 방법 #
- 23. C에서 DLLMain을 만드는 방법
- 24. C에서 다차원 배열을 비교하는 방법 #?
- 25. C에서 문자열의 형식을 확인해야합니다.
- 26. GWT JsArray를 사용하여 중첩 배열을 만드는 방법
- 27. C에서 동적 행렬을 만드는 방법은 무엇입니까?
- 28. 시간 배열을 만드는 방법
- 29. jquery에서 배열을 만드는 방법
- 30. 이미지 배열을 만드는 방법
당신은 가변 배열 (다른 길이의 배열의 배열), 또는 X * Y 고정 된 크기의 배열을 찾고 계십니까? 그리고 문자열의 2 차원 배열 (== char에 대한 포인터)을 찾고 있습니까? 아니면 문자열의 배열 (== char에 대한 포인터)에 대한 포인터의 배열을 찾고 있습니까? 아니면 char의 3 차원 배열을 찾고 있습니까? 배열에 포인터가 없습니까? – hyde
배열에 문자열을 저장하고 string1 = array [1] 등과 같이 문자열에 접근 할 수있는 방법을 찾고있었습니다. 문자 포인터에 대한 포인터입니까? –
좋아, 그래서 당신은 실제로 문자열 (= char 포인터)의 단일 배열을 찾고 있습니다. 2D 배열로 생각하면 도움이되지 않을 수도 있습니다 (특정 시점에서 그렇다고하더라도). – hyde