Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何分割字符数组_C_Arrays_Char - Fatal编程技术网

C 如何分割字符数组

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字符

我试图将一个由n个字符组成的数组(string1)拆分为两个字符指针,分别表示I个字符(char*first)和n-I个字符(char*second)。对于第二个数组,我使用

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()
,仅复制其中的某一部分,并自动分配内存。的可能副本