는 C

2011-03-25 3 views
2

에서 "변수"Variablenames은 내가 C 실제로 가능하지 않다 무엇을 찾고 생각하지만, 어쩌면 일부는 그것을 해결하는 방법을 생각이 있습니다는 C

내가 어떤 입력 데이터를 처리 할 필요가. 이 데이터는 int로 주어지며 실제 데이터를 보유하는 데이터의 수와 문자열의 수 (즉, char *)를 제공합니다. 이 문자열의 이름은 data_0 ... data_n :

int n = 42; // the number of strings 
char *data_0 = "some input1"; 
char *data_1 = "some input2"; 
.... 
char *data_41 = "the last input data"; 

그래서 데이터를 얻는 방법입니다. 문제는 다음과 같습니다. 어떻게 처리 할 수 ​​있습니까? 내 목표는 큰 배열에 그들을 저장하는 것입니다. 이 배열을 초기화하는 것은 물론 간단합니다. malloc을 사용하여 얻은 n 개의 char-Pointer 배열이 필요합니다. 하지만이 문자열을 배열에 할당하고 싶습니다. 그리고 이것이 내가 붙어있는 지점입니다. 이전에 크기를 모르기 때문에 동적으로 할당해야합니다. 같은 뭔가 :

for(i = 0; i < n; i++) 
     datastorage[i] = data_i; 

그래서 나는 동적 여기서 variableName 액세스하는 의미. 내가 무슨 뜻인지 이해해 주길 바래. 고마워.

+0

나는 C에서 불가능하다고 사과합니다. 어디에서 입력 데이터를 가져 옵니까? –

+0

여기에 두 가지 질문을합니다. 원본에서 첫번째 것; 어떤 종류의지도를 사용하십시오. 두 번째의 경우; @ ammoQ의 대답을 사용하십시오. – stefan

답변

4

처음부터 배열로 만드십시오! 배열로 접근해야한다면 42 개의 별도 변수를 가질 필요가 없습니다! BTW는 C에서 런타임에 변수 이름을 사용할 수 없으며 컴파일 후 손실되기 때문에 동적으로 변수에 액세스하는 것을 잊어 버리십시오.

int n = 42; // the number of strings 
char *data[42]; 
     data[0] = "some input1"; 
     data[1] = "some input2"; 
.... 
     data[41] = "the last input data"; 

for(i = 0; i < n; i++) 
    datastorage[i] = data[i]; 
1

C에서이 작업을 수행하는 간단한 방법은 없습니다. 배열의 전체 지점에서 이처럼 뭔가를 할 필요가 없기 때문입니다. 전통적으로 배열을 사용하여 각 변수에 대해 고유 한 이름을 사용하지 않고 색인을 사용하여 여러 변수를 참조 할 수 있습니다.

나는 당신이 당신의 프로그램에 C 소스 파일로서 이것과 같이 한 줄에 하나의 변수를 입력하는 것이 이상하다는 것을 알았다. 이 C 파일을 생성하는 경우 대신 배열을 사용하도록 생성하여 요구하는 수정 코드의 필요성을 제거해야합니다. 다른 사람이 당신에게 C 코드를주는 경우, 배열을 사용하도록 변경하도록 요청하십시오. 이렇게 불편을 겪어야 할 이유가 없으며, 변경 작업은 매우 간단해야합니다.

+0

좋아,이 입력 데이터를 실제로 C 소스 파일로 만듭니다. BC 특정 문제에 대한 다른 방법을 찾지 못했습니다 (어쨌든,이 특정 문제는 실제로 데이터를 읽는 좋은 방법입니다).중요한 점은 동적으로 이름을 처리 할 수 ​​있다면 데이터 생성 함수의 큰 부분을 다시 작성할 필요가 없다는 것입니다.) 어쨌든 덕분에 모든 – Chris

1

나는 ... 당신이 정직하게 뭘 하려는지 100 % 확신 당신이 결국 배열로 이러한 모든 요소를 ​​넣어 원하는 무엇을 볼 수에서

.

그래서 42 개 요소의 배열을 사용하고 키에서 파싱 할 수있는 것을 기반으로 할당하지 않는 것이 좋습니다.

예 : data_1, replace data_, 1, datarray [atoi (1)] = char 포인터.

맞습니까?

또한 개체 (C ...로 구조체)를 만들고이를 다른 동적 데이터 구조에 동적으로 배치 할 수 있습니다.

+0

덕분에 왜 atoi를 사용하고 있는지 잘 모르겠습니다. 배열 검색. 문자열을 정수로 변환하지 않습니다. – templatetypedef

+0

파일에서 data_1 문자열을 읽고 있다고 생각했습니다. 아마 내가 잘못 읽었을거야. – tamarintech