C 如何分割字符数组
我试图将一个由n个字符组成的数组(string1)拆分为两个字符指针,分别表示I个字符(char*first)和n-I个字符(char*second)。对于第二个数组,我使用C 如何分割字符数组,c,arrays,char,C,Arrays,Char,我试图将一个由n个字符组成的数组(string1)拆分为两个字符指针,分别表示I个字符(char*first)和n-I个字符(char*second)。对于第二个数组,我使用 char* second = string1+n; 我想知道的是如何只使用first中的第一个I字符。我不想为这两个数组分配更多内存,我想操纵string1,这样我就可以指向已经存在的部分内容 编辑: 我无法编辑string1。我是否可以先强制转换以缩短长度而不添加空字符?除非分配更多内存,否则不能像使用任何其他C字符
char* second = string1+n;
我想知道的是如何只使用first中的第一个I字符。我不想为这两个数组分配更多内存,我想操纵string1,这样我就可以指向已经存在的部分内容
编辑:
我无法编辑string1。我是否可以先强制转换以缩短长度而不添加空字符?除非分配更多内存,否则不能像使用任何其他C字符串一样使用“first”(例如,将其传递给字符串函数,
printf
等),因为它不是以“second”结尾的空字符串
在很多情况下,你仍然可以绕开它,因为你知道它的长度,但是在这里你没有什么神奇的事情可以做;空终止符需要一个字节。
C
中的字符串必须以null
终止,即在其末尾有一个\0
字符。例如,如果您有两个单词被空格分隔,如下所示:
char *str1 = "fat chance";
您可以通过将空格替换为\0
来“拆分”它们:
str1[3] = '\0';
char *str2 = str1 + 4;
然后将str2设置为指向\0
之后的:
str1[3] = '\0';
char *str2 = str1 + 4;
但是,如果您需要在没有方便放置终止符的位置拆分某些内容,则需要将字符串的第二部分复制到其他位置。最简单的方法是(如果您不介意以后再使用free()
),使用strdup()
,然后在str1
中放置NULL
终止符:
char *str2 = strdup(str1 + 4);
str1[4] = '\0';
我假设strdup分配内存,因为我以后需要使用free,对吗?@mrswmmr,yessir。它使您不必自己使用
malloc()
。我是否可以以某种方式强制转换string1以使指针认为它只有I长度?不。不知道还有什么要告诉您,它不是这样工作的。作为对编辑的响应,不,您需要复制它。您可以使用占用一定长度的strndup()
,仅复制其中的某一部分,并自动分配内存。的可能副本