如何在c中的某个位置终止字符指针?

时间:2015-04-16 05:39:16

标签: c string pointers null char

我试图通过设置空终结符来在c中的特定位置终止字符指针。

例如,如果我有一个字符指针

 char *hi="hello";

我希望通过将"hell"设置为null来将其设为o

我尝试使用strcpy执行此操作,例如

strcpy(hi+4, "\0");

但它没有用。

3 个答案:

答案 0 :(得分:7)

"hello"是字符串文字,因此无法修改,在您的代码中,hi指向此类文字中的第一个元素。任何修改它所指向的东西的尝试都是未定义的行为

但是,如果您创建自己的char数组,则可以随意插入空终止符。例如,

char hi[] = "hello"; // hi is array with {'h', 'e', 'l', 'l', 'o', '\0'}
hi[4] = '\0';

此处,hi是您拥有的char长度为6的数组,您可以修改其内容。设置第5个元素后,它包含{'h', 'e', 'l', 'l', '\0', '\0'},打印它将产生hell

答案 1 :(得分:4)

第1点:

在您的代码中

char *hi="hello";

hi是指向字符串文字的指针。它可能无法修改。您必须使用char数组,并使用相同的字符串文字初始化。然后,您可以根据需要修改该阵列的竞争对手。

第2点:

您不需要strcpy()复制单个char。您只需使用赋值运算符=分配值。

注意:您没有终止指针,使用空终止符终止char数组以使其成为字符串

答案 2 :(得分:1)

如果字符串是文字,则无法对其进行修改。否则:

要在4个字符后终止C字符串,您可以使用:

*(he+4) = 0;

he[4] = 0;
he[4] = '\0';

或者,因为strcpy()复制了指定的所有字符,然后附加了' \ 0'字符:

strcpy(he+4, "");

但这是混淆