如何划分字符数组

时间:2012-02-01 03:24:55

标签: c arrays char

我试图将n个字符的数组(string1)分成两个字符指针,分别代表i个字符(char * first)和n-i个字符(char * second)。对于第二个数组,我使用了

char* second = string1+n; 

我想知道的是如何只使用前面的第一个i字符。我不想为这两个数组分配更多的内存,我想操纵string1,以便我只指向已经存在的部分内容。

编辑:

我无法编辑string1。我可以首先以某种方式投射,以便在不添加空字符的情况下缩短长度吗?

2 个答案:

答案 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';