我试图将n个字符的数组(string1)分成两个字符指针,分别代表i个字符(char * first)和n-i个字符(char * second)。对于第二个数组,我使用了
char* second = string1+n;
我想知道的是如何只使用前面的第一个i字符。我不想为这两个数组分配更多的内存,我想操纵string1,以便我只指向已经存在的部分内容。
编辑:
我无法编辑string1。我可以首先以某种方式投射,以便在不添加空字符的情况下缩短长度吗?
答案 0 :(得分:2)
除非你分配更多内存,否则你不能像使用任何其他C字符串那样使用“first”(例如将其传递给字符串函数,printf
等),因为它不会在边界处终止与“第二”。
在很多情况下,你当然可以解决这个问题,因为你知道它的长度,但你在这里做的并不神奇; null终止符需要一个字节。
答案 1 :(得分:1)
C
中的字符串必须为NULL
- 已终止,即在其末尾有\0
个字符。例如,如果你有两个用空格分隔的单词,就像这样:
char *str1 = "fat chance";
您可以通过用\0
替换空格来“拆分”它们:
str1[3] = '\0';
然后将str2
设置为指向\0
:
char *str2 = str1 + 4;
但是,如果你需要在没有方便放置终结符的地方拆分某些东西,那么你需要将字符串的第二部分复制到别处。最简单的方法是使用free()
,然后在strdup()
中放置一个NULL
终结符,这是最简单的方法(如果你不介意以后str1
):
char *str2 = strdup(str1 + 4);
str1[4] = '\0';