2014-02-09 2 views
0

내가 여기서 잘못하고 있는지 확실하지 않습니다. char 배열의 요소를 하나씩 왼쪽으로 순환 이동하려고합니다. 그것은 효과가있는 것처럼 보이지만 지속되지는 않습니다. 나는 그것이 포인터 문제라고 생각하지만 포인터가 어떻게 작동하는지 아직 모르겠다. 그래서 어디에서 시작해야할지 모르겠다. 문제는 for 루프 내부의 값을 변경하고 나중에 다시 설정하는 것으로 보인다.C에서 배열 수정

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void ip(); 

int main(){ 
    char d[10] = "010"; 
    char k[10] = "1010000010"; 
    initialPermutation(d, k); 
    return(0); 
} 

void ip(char * data, char* key){ 
    int i; 

    // P10(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10) = (k3, k5, k2, k7, k4, k10, k1, k9, k8, k6) 
    char P10[10] = {key[2],key[4],key[1],key[6],key[3],key[9],key[0],key[8],key[7],key[6]}; 

    // split P10 into two segments 
    char left5[5] = {P10[0],P10[1],P10[2],P10[3],P10[4]}; 
    char right5[5] = {P10[5],P10[6],P10[7],P10[8],P10[9]}; 

    // pre shift binary string 
    printf("Pre-shift: "); 
    for(i=0;i<5;i++) 
     printf("%c",left5[i]); 
    for(i=0;i<5;i++) 
     printf("%c",right5[i]); 
    printf("\n"); 

    // circular shift left one bit (here is where the problem is) 
    for(i=0;i<5;i++){ 
     char templ = left5[4-i];  
     left5[4-i] = left5[i]; 
     left5[i] = templ; 

     char tempr = right5[4-i]; 
     right5[4-i] = right5[i]; 
     right5[i] = tempr; 
    } 



    printf("Post- (outside for loop): "); 

    for(i=0;i<5;i++) 
     printf("%c",left5[i]); 
    for(i=0;i<5;i++) 
     printf("%c",right5[i]); 
    printf("\n"); 
} 
+0

' "1010000010"는'카운트 경우 11 개 문자가 널 터미네이터 (null terminator)는'char k [10] '의 초기화에서 문자열이 null이 아니기 때문에 – ouah

답변

1

루프가 값을 이동하지 않고 배열을 두 번 뒤집습니다. 인덱스 4를 인덱스 0으로 바꾼 다음 1을 3, 2를 2, 2를 3, 1을 3, 마지막으로 4를 0으로 바꿉니다.이 시점에서 배열은 시작했을 때와 완전히 같습니다.

이 코드는 실제 회전 왼쪽으로 이동하지 : 당신은 실제로 하나 개의 요소가 너무 큰 배열을 선언하면

char tmp = left5[0]; 
for(i = 1; i < sizeof(left5); ++i){ 
    left5[i-1] = left5[i] 
} 
left5[4] = tmp; 

당신이 쓸 수를 :

char left5[6] = {P10[0],P10[1],P10[2],P10[3],P10[4]}; 
left5[5] = left5[0] 
for(i=0; i < 5; ++i){ 
    left5[i] = left5[i+1]; 
} 
+0

그 것이 문제였다. 감사 – cHam