我想从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,我能够让代码工作。谢谢!
答案 0 :(得分:3)
您不能在函数内的数组上使用sizeof
。您必须使用strlen()
(一次,最好)来计算长度,或者将其作为额外参数传递。
此外,您无法合法地将a
和b
打印为字符串,因为您永远无法确保它们已正确终止。
第三,你只写过a
和b
的第一个字符,所以它们永远不会超过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;
}