2014-06-21 3 views
0

작은 단어 목록 .txt 파일을 만들려면 C 프로그램을 만들려고합니다. 나는 10 개의 요소들로 구성된 char 배열을 만들었고, 나는 그 10 개의 문자들로 가능한 모든 4 개의 문자 조합을 필요로한다.배열의 특정 요소에 대한 액세스

그래서, 나는 4 개의 for 루프를 가지고 배열에서 요소를 가져 와서 4 개의 문자 조합을 만들어 .txt로 씁니다.

내 문제는 포인터를 사용하여 배열 요소에 액세스하는 것입니다. 나는하고있다 :

char array[10] = {'A', 'S' ,'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M'}; 
char input[4]; 
char *p; 
p=array; 
FILE *pFile = NULL; 
char *filename = "output.txt"; 
pFile = fopen(filename, "w"); 

for(i=0;i=3;i++) { 
    for(j=0;j=3;j++) { 
    for(k=0;k=3;k++) { 
     for(l=0;l=3;l++) { 
     strcpy(input, *(p+i)); 
     strcat(input, *(p+j));//"gluing" first and second element of new string together 
     strcat(input, *(p+k));//same as line before 
     strcat(input, *(p+l)); 
     strcat(input, "\n"); 
     fprintf(pFile, input); 

//end of for loops, closing .txt file etc. 

이것은 잘 컴파일되고 종료되지만 충돌이 발생한다. 배열 요소에 액세스 할 때 오류가 발생했다고 생각합니다.

아이디어가 있으십니까? 많은 감사를드립니다. 그들이 NULL을 찾을 때까지

char string[10] = "assd"; 
//and insert that instead of *(p+i) anywhere it works as it is supposed to 
+0

char 배열 [10] = {A, S, D, F, G, H, J, K, L, M} 믿기가 어렵다 ... – CiaPan

+0

'경고 : 'strcpy'의 인자 2는 cast가없는 정수에서 포인터를 만든다 .'; /usr/include/string.h:127 : note : 예상 된 'const char * restrict'이지만 인수는 명시 적으로 활성화 된 경고 없이도 'char'' ... gcc 유형입니다. – mafso

답변

1

strcpystrcat 모두 계속하고 배열이 하나가되지 않습니다 내가 만들

추가 정보>. 배열의 각 슬롯은 단일 문자 다음에 다음 단일 문자 등이옵니다. 따라서 strcpy는 선택한 문자에서 전체 목록의 끝까지 복사하여 시작합니다. 마지막으로, 4 요소 배열에 다섯 번째 요소 ("\ n")를 추가합니다. 대신 다음을 수행하십시오.

input[0] = *(p+i); 
input[1] = *(p+j); 
input[2] = *(p+k); 
input[3] = *(p+l); 
input[4] = "\n"; 

이렇게하면됩니다. 긴 그것을 개선 할 수있는 여러 가지가 있기 때문에,

fprintf(pFile, "%c%c%c%c\n", *(p+i), *(p+j), *(p+k), *(p+l)); 

난 당신의 코드 "코드 골프"를 연주 계속 유혹 해요 : 참고는, 그러나, fprintf와 갈 쉬운 방법이 될 수있다 실행,하지만 그것을 작동 시키려고 멈추지 않을 것 같아요 (비록 당신의 컴파일러가 'A' 같은 따옴표를 사용하여 글자를 나열하지 않고 첫 번째 줄을 받아들이는 것이 놀랍다 고 생각합니다). 마지막으로 한 가지 덧글 : p 변수가 전혀 필요하지 않습니다. 위의 내에서 실제로 array[i]*(p+i])으로 쉽게 처리 할 수 ​​있습니다.

+0

'strcpy'와'strcat'는 선택된 문자로부터 복사를 시작하지 않습니다. OP는 포인터 값으로 정수를 전달합니다. – mafso

+0

감사합니다. 훌륭한 작품들입니다. fprintf를 사용하는 것처럼 사용하기로 결정했습니다. 그래서, 문제는 strcpy와 strcat 함수를 사용하는 것이 었습니다. 고마워요! – Rorschach

0
#include <stdio.h> 

int main(void){ 
    char array[] = {'A', 'S' ,'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M'}; 
    char input[5] = {0}; 
    char *filename = "output.txt"; 
    int size = sizeof(array)/sizeof(*array); 
    FILE *pFile = NULL; 
    int i,j,k,l; 
    pFile = fopen(filename, "w"); 

    for(i=0;i<size;++i){ 
     input[0] = array[i]; 
     array[i] = 0;//selected 
    for(j=0;j<size;++j){ 
     if(!(input[1] = array[j])) 
      continue;//skip 
     array[j] = 0; 
    for(k=0;k<size;++k){ 
     if(!(input[2] = array[k])) 
      continue; 
     array[k] = 0; 
    for(l=0;l<size;++l){ 
     if(!(input[3] = array[l])) 
      continue; 
     fprintf(pFile, "%s\n", input);//10*9*8*7 lines 
    } 
     array[k] = input[2]; 
    } 
     array[j] = input[1]; 
    } 
     array[i] = input[0];//restore 
    } 

    fclose(pFile); 
    return 0; 
} 
관련 문제