将char数组的第一个字符分配给另一个变量

时间:2014-10-22 13:21:08

标签: c arrays char element

我想从char数组中获取一个字符并将其移动到另一个字符数组中。令我发疯的是,我在如此简单的事情上遇到了很多困难。

我的代码意味着一次反转字符串2的值。我有一个字符串(ABCDEFGH),我想把它分成两个字符串(ACEG和BDFH)。我该怎么做呢?

目前,我有这个:

char *hexrev(char str[]){

    int i = 0;
    char a[256];
    char b[256];
    int len = strlen(str);

    for(i; i<len-1; i+=2)
    {
        printf("str[i] : %c\n", str[i]);
        a[0] = str[i];
        b[0] = str[i+1];
        a[1] = '\0';
        b[1] = '\0';
        printf("A : %s\n", a);
        printf("B : %s\n", b);
    }
    return str;
}

通过将sizeof(str)改为strlen(str)并终止&amp; b,我能够让代码工作。谢谢!

2 个答案:

答案 0 :(得分:3)

您不能在函数内的数组上使用sizeof。您必须使用strlen()(一次,最好)来计算长度,或者将其作为额外参数传递。

此外,您无法合法地将ab打印为字符串,因为您永远无法确保它们已正确终止。

第三,你只写过ab的第一个字符,所以它们永远不会超过1个字符。

你应该展示一个稍微完整的例子,至少包括调用你的函数的代码。

答案 1 :(得分:1)

int i = 0, j = 0;
char a[256];
char b[256];
int len = strlen(str);

for(i; i<len-1; i+=2){
    a[j]   = str[i];
    b[j++] = str[i+1];
}
a[j] = b[j] = '\0';
printf("A : %s\n", a);
printf("B : %s\n", b);

#include <stdio.h>

int main(void){
    char str[] = "ABCDEFGHI";//In the case of odd-length
    char a[256]={0};//letter of the index of odd numbered.(odd : 1 origin)
    char b[256]={0};//for even
    int i;
    char *p[] = {a, b};

    for(i = 0; str[i]; ++i){
        *p[i & 1]++ = str[i];
    }
    printf("A : %s\n", a);//ACEGI
    printf("B : %s\n", b);//BDFH
    return 0;
}