如何在C中将字符转换为字符串?
我是C新手,在使用strcat()时遇到了一个问题。我查了一下strcat,发现它以字符串作为参数,但当我从char数组中拆分项时,它是char,当我将它用作strcat的参数时,它会输出错误如何在C中将字符转换为字符串?,c,C,我是C新手,在使用strcat()时遇到了一个问题。我查了一下strcat,发现它以字符串作为参数,但当我从char数组中拆分项时,它是char,当我将它用作strcat的参数时,它会输出错误 #include <stdio.h> #include <string.h> int main() { char a[10]="abcdefg123"; char *pa=a; char *out[2]={"",""}; int counter=0; while(*pa !=
#include <stdio.h>
#include <string.h>
int main()
{
char a[10]="abcdefg123";
char *pa=a;
char *out[2]={"",""};
int counter=0;
while(*pa != '\0'){
if (counter%2==0){
strcat(out[0],*pa);
}
else{
strcat(out[1],*pa);
}
counter++;
pa++;
}
printf("%s,%s\n",out[0],out[1]);
return 0;
}
#包括
#包括
int main()
{
字符a[10]=“abcdefg123”;
char*pa=a;
char*out[2]={“”“”};
int计数器=0;
而(*pa!='\0'){
如果(计数器%2==0){
strcat(out[0],*pa);
}
否则{
strcat(输出[1],*pa);
}
计数器++;
pa++;
}
printf(“%s,%s\n”,out[0],out[1]);
返回0;
}
代码的目的是将一个字符串拆分为两个字符串,每个字符串包含奇数或偶数位置的所有字符。但是,当我尝试取消引用字符指针时,我得到的只是一个字符,但似乎我需要字符串第1点。根据strcat()
。。dest字符串必须有足够的空间用于结果
第2点。strcat()
的第二个参数是const char*
,因此调用不能是strcat(out[0],*pa)代码>。您需要为此使用一个临时数组,它将只保存值*pa
。否则,您可以像这样使用strncat()
strncat(out[0], pa, 1); // copy only 1 char
在后一种情况下,不需要任何临时数组
参考:再次从手册页
strncat()
函数类似,只是它最多使用src
中的n
字节,如果src
包含n
或更多字节,则不需要以null结尾
在strcat
中使用临时字符串,而不是strcat(out[0],*pa)代码>
另外,请确保为输出分配足够的内存
int main()
{
char a[10]="abcdefg123";
char temp[2] = {0};
char *pa=a;
// This is not good for `strcat`.
// char *out[2]={"",""};
// Use this instead.
char out[2][20]={"",""};
int counter=0;
while(*pa != '\0'){
temp[0] = *pa;
if (counter%2==0){
strcat(out[0], temp);
}
else{
strcat(out[1], temp);
}
counter++;
pa++;
}
printf("%s,%s\n",out[0],out[1]);
return 0;
}
strcat()需要指向以null结尾的字符串的指针。您正在取消引用一个指针(使用*运算符),该指针给出一个字符。您不能简单地将字符转换为指向sting的指针。您可能希望使用memcpy()而不是strcat(),但是对于复制单个字节,在左侧和右侧使用*运算符进行简单赋值就可以了。但是,正如其他人指出的那样,您的代码没有为您分配空间来将字符复制到其中,因此您需要进行额外的更改来解决这个问题。此外,您还必须记住将最后一个空字节复制到两个输出字符串的末尾。在C中,“字符串”实际上只是指向字符的指针;字符串从该字符到终止的0字节(即NUL
)
如果取消对字符串指针的引用,将在该位置获取字符。如果指针指向字符串的开头,则获得字符串的第一个字符
你的程序有一些问题。首先,您需要为新字符串分配空间strcat()
将尝试将字符复制到任何你告诉它的地方,但你的工作是确保那里有空间,并且可以在那里书写。out
的声明只声明了两个指针,并将它们初始化为指向零长度常量字符串。相反,您需要分配存储,例如:
char out0[64], out1[64];
char *out[]={out0, out1};
这将生成两个每个64个字符的输出缓冲区,然后设置out
和指向它们的指针
另一个问题:您为char数组声明了一个长度为10的字符串,但随后用一个长度为10的字符串初始化它。这意味着没有空间容纳终止的NUL字节,而C不会放置一个。然后strcpy()
或strcat()
将从字符串中复制额外的垃圾,直到出现NUL字节。如果你运气好,马上就会有一个错误,你不会发现错误,但是如果你运气不好,你会得到奇怪的垃圾
让编译器计算字符串中的字节数,然后做正确的事情。省略长度:
char a[]="abcdefg123";
如果<代码> OUT/<代码>包含两个空字符串,那么如何在不分配更多内存的情况下添加?<代码> OUT/CODE>初始化为指向文字,并且写入内存区域(即使足够大)在C和C++中都是非法的。“String”表示“null终止代码“char 数组”。i行char temp[2]={0}的问题;0代表什么?如果你做temp[0]=*pa,0char temp[2]={0}会发生什么
创建一个字符数组,并将该数组的所有元素设置为0
<代码>温度[0]=*pa
将数组的第一个元素设置为*pa
,将第二个元素设置为0
。使数组的行为类似于以null结尾的字符串。@naltipar,允许在字符串a
上迭代。本可以同样有效地使用索引<代码>整数i=0代码><代码>而(a[i]!='\0')
<代码>温度[0]=a[i]代码><代码>++i
。