C语言中的数组修改

C语言中的数组修改,c,arrays,C,Arrays,不知道我做错了什么。我试着将char数组的元素循环移位1。这似乎有效,但并不持久。我假设这是指针问题,但我仍然不知道指针是如何工作的,所以我不确定从哪里开始。问题是,它似乎只改变for循环内的值,然后重置 #include <stdio.h> #include <stdlib.h> #include <string.h> void ip(); int main(){ char d[10] = "010"; char k[10] = "101

不知道我做错了什么。我试着将char数组的元素循环移位1。这似乎有效,但并不持久。我假设这是指针问题,但我仍然不知道指针是如何工作的,所以我不确定从哪里开始。问题是,它似乎只改变for循环内的值,然后重置

#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");
}
#包括
#包括
#包括
无效ip();
int main(){
字符d[10]=“010”;
字符k[10]=“1010000010”;
初始置换(d,k);
返回(0);
}
无效ip(字符*数据,字符*键){
int i;
//P10(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6)
字符P10[10]={键[2],键[4],键[1],键[6],键[3],键[9],键[0],键[8],键[7],键[6]};
//将P10分成两段
charleft5[5]={P10[0],P10[1],P10[2],P10[3],P10[4]};
char right5[5]={P10[5],P10[6],P10[7],P10[8],P10[9]};
//移位前二进制字符串
printf(“班前:”);

对于(i=0;i您的循环没有移动值,而是将数组反转两次。 它将索引0与索引4交换,然后将1与3交换,然后将2与2交换,然后将3与1交换,最后将4与0交换。此时数组与开始时完全相同

此代码执行实际的向左旋转换档:

char tmp = left5[0];
for(i = 1; i < sizeof(left5); ++i){
    left5[i-1] = left5[i]
}
left5[4] = tmp;
chartmp=left5[0];
对于(i=1;i
如果实际将数组声明为一个太大的元素,则可以编写:

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];
}
charleft5[6]={P10[0],P10[1],P10[2],P10[3],P10[4]};
left5[5]=left5[0]
对于(i=0;i<5;++i){
left5[i]=left5[i+1];
}

“1010000010”
如果计算空终止符,则该字符串有11个字符,因此在初始化
字符k[10]
时字符串不会以空终止。这就是问题所在。谢谢