Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中将字符转换为字符串?_C - Fatal编程技术网

如何在C中将字符转换为字符串?

如何在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 !=

我是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 != '\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,0
char temp[2]={0}会发生什么
创建一个字符数组,并将该数组的所有元素设置为
0
<代码>温度[0]=*pa
将数组的第一个元素设置为
*pa
,将第二个元素设置为
0
。使数组的行为类似于以null结尾的字符串。@naltipar,允许在字符串
a
上迭代。本可以同样有效地使用索引<代码>整数i=0<代码>而(a[i]!='\0')
<代码>温度[0]=a[i]<代码>++i