我试图通过设置空终结符来在c中的特定位置终止字符指针。
例如,如果我有一个字符指针
char *hi="hello";
我希望通过将"hell"
设置为null来将其设为o
。
我尝试使用strcpy执行此操作,例如
strcpy(hi+4, "\0");
但它没有用。
答案 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, "");
但这是混淆。