如何像python中的字符串一样在C中索引字符串?

如何像python中的字符串一样在C中索引字符串?,python,c,string,substring,c-strings,Python,C,String,Substring,C Strings,例如,在python中,您可以像这样索引字符串 some_string = "hello" substring = some_string[0:3] 并且子串将是hel 然而,在C中,如果我有 char some_string[] = {'h', 'e', 'l', 'l', 'o'}; 有没有一种方法可以得到公正的评价 {'h', 'e', 'l'} 我可能忽略了一个非常简单的解决方案,但我发现有时很难用两种语言思考。不太简单,主要是因为内存管理。您要么需要子字符串成为足够多字符的数组,

例如,在python中,您可以像这样索引字符串

some_string = "hello"
substring = some_string[0:3]
并且子串将是hel

然而,在C中,如果我有

char some_string[] = {'h', 'e', 'l', 'l', 'o'};
有没有一种方法可以得到公正的评价

{'h', 'e', 'l'}

我可能忽略了一个非常简单的解决方案,但我发现有时很难用两种语言思考。

不太简单,主要是因为内存管理。您要么需要子字符串成为足够多字符的数组,要么需要动态分配内存。例如:

char *some_string = "hello";
char substring[4];
strncpy(substring,some_string,3);
substring[3]='\0';
或:


不是很简单,主要是因为内存管理。您要么需要子字符串成为足够多字符的数组,要么需要动态分配内存。例如:

char *some_string = "hello";
char substring[4];
strncpy(substring,some_string,3);
substring[3]='\0';
或:


对于初学者来说,这是一个字符数组的声明

char some_string[] = {'h', 'e', 'l', 'l', 'o'};
不包含字符串

你也应该写

char some_string[] = {'h', 'e', 'l', 'l', 'o', '\0'};

获取子字符串的唯一方法是复制另一个字符数组中的字符子范围

比如说

#include <string.h>

// ...

char substring[4];

strncpy( substring, some_string, 3 );
substring[3] = '\0';

对于初学者来说,这是一个字符数组的声明

char some_string[] = {'h', 'e', 'l', 'l', 'o'};
不包含字符串

你也应该写

char some_string[] = {'h', 'e', 'l', 'l', 'o', '\0'};

获取子字符串的唯一方法是复制另一个字符数组中的字符子范围

比如说

#include <string.h>

// ...

char substring[4];

strncpy( substring, some_string, 3 );
substring[3] = '\0';

请注意,some_字符串不是C字符串。它缺少空终止符。请注意,some_字符串不是C字符串。它缺少null终止符。我将考虑使用MycPy而不是StrncPy。@通常,复制的字符串可以小于请求的范围。在一般情况下,这是正确的,但是我得到的印象是,我们正在处理一个场景,在这个场景中,我们知道要复制的子串是全长的。特别是考虑到OP正在寻找它相当于在Python字符串中给出一个范围。我将考虑使用MycPy而不是StrncPy。@通常,复制的字符串可以小于请求的范围。在一般情况下,这是正确的。但我得到的印象是,我们正在处理一个场景,在这个场景中,我们知道要复制的子字符串是全长的。特别是考虑到OP希望它等同于在python字符串中给出一个范围。注意:您需要检查start@wildplasser,以及替代strncpy的建议?可能只是strcpy,甚至是memcpy?@wildplasser,strcpy不会,因为可能需要复制字符串末尾。memcpy可以。strncpy有什么问题?注意:您需要检查start@wildplasser,以及替代strncpy的建议?可能只是strcpy,甚至是memcpy?@wildplasser,strcpy不起作用,因为可能需要复制字符串末尾。memcpy可以。strncpy有什么问题?