2012-08-29 337 views
1

我正在用c语言编写代码。将字符串转换为字符串

  1. char a[]={p,r,a,d,e,e,p}
    我想在最后添加'0/'使它字符串。
    或者是否有任何方法使其字符串,而不是在最后加入null?

  2. char *a=pradeep;
    将它转换为字符串通过在年底

回答

1
char *a="pradeep"; 

加入空使一个字符串,并在末尾添加空字符。

如果你真的想使用类似的1语法来声明它,你可以这样做:

char a[] = {'p','r','a','d','e','e','p', 0}; 

但没有理由这样做。

编辑关于在评论问题

如果你想创建n字符的字符串您收到,你可以这样做:

char *a = malloc(n*sizeof(char)+1); 

如果它总是10个字符或更少,你可以声明为

char a[11]; 

然后设置每个a[i]与接收到的值,一个nd最后一个与0

你也可以使用sprintf来进行连接,但无论如何你必须确保你有足够的地方分配。

+0

其实有一个特例,你可能需要后者。如果您对普通7位ASCII有特殊的扩展名,则不能相信源代码编辑器中的字体与应用程序具有相同的“扩展ASCII”值。在为嵌入式显示器实现符号表时,我遇到过这样的几次。解决办法是输出ASCII码而不是符号。使用以前的符号,只能通过添加十六进制值来实现。 - > – Lundin

+0

假设我们要将十六进制值为0xAA的字符添加到字符串中。如果我们写“pr \ xAAadeep”,我们会得到一个bug,因为C字符串文字中的一个十六进制序列只能以非十六进制数字结尾。在这种情况下,编译器会将AAadee视为有效的十六进制。所以你的后一个例子逐个字符更安全,不太混乱。 – Lundin

+0

@dystroy,我正在接收一系列字符,将其作为来自rs232的10个字符。在一个变量中接收到的是字符或一组字符的形式。我想让他们成为字符串。 – pradeep

3

您不能更改数组的大小a因此您无法向其添加空终止符。您可以将声明更改为:

char a[] = "pradeep"; 

它将隐式添加空终止符。或者:

char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', 0 }; 

但字符串文字更简单,更清晰。大多数(如果不是全部的话)C字符串库函数都需要一个以空字符结尾的字符串。

1

你的代码没有任何意义,也不会编译。

字符串字面最好使用字符串文字语法编写的:

const char *a = "pradeep"; 

这将包括终止字符,使得在那您可以用任何的字符串处理函数使用C字符串a点,打印出, 等等。现在

1
1). char a[]={'p','r','a','d','e','e','p','\0'}; 

其阵列含有有效字符串。

2). char *a="pradeep"; 

这会在结尾处自动追加空格以生成有效的字符串。

0

如果分配一个文本字符串一个字符阵列,编译器将自动创建与在端部终接'\0'字符正确的数组:

char a[] = "pradeep"; 

上面相同书写

char a[] = { 'p', 'r', 'a', 'd', 'e', 'e', 'p', '\0' }; 

另外,使用阵列是推荐的方式,但上面的第一种替代方案相当于

char *pa = "pradeep"; 

但是,最后,您不能再使用sizeof运算符,因为这将返回指针的大小,而不是字符串的长度。关于sizeof运算符的另一个注意事项,对于前两个示例,它将返回数组的大小而不是字符串的长度,即sizeof对于字符数组将包含终止字符。

+2

'char * pa = ..'也使得它不可修改,而'char a [] = ...;'是可修改的。 – hmjd