获取char的子字符串*

142 c substring char

例如,我有这个

char *buff = "this is a test string";
Run Code Online (Sandbox Code Playgroud)

并希望得到"test".我怎样才能做到这一点?

Goz*_*Goz 206

char subbuff[5];
memcpy( subbuff, &buff[10], 4 );
subbuff[4] = '\0';
Run Code Online (Sandbox Code Playgroud)

任务完成 :)

  • 不要忘记#include <string.h>. (25认同)
  • @alexandernst:究竟是怎么回事?在堆栈上分配的5个字节(当它超出范围时将被释放)几乎不浪费内存...... (19认同)
  • 这会浪费记忆力.你被警告了!:P (12认同)
  • @alexandernst:问题是如果不复制它就不能对字符串数据做很多事情.如果从原始字符串中获取指向该节的指针,则需要知道长度,因为它没有空终止符(不影响原始字符串). (8认同)

Bla*_*iev 82

假设您知道子字符串的位置和长度:

char *buff = "this is a test string";
printf("%.*s", 4, buff + 10);
Run Code Online (Sandbox Code Playgroud)

您可以通过将子字符串复制到另一个内存目标来实现相同的功能,但由于您已将其存储在内存中,因此这是不合理的.

这是通过使用指针避免不必要的复制的一个很好的例子.

  • 使用sprintf存储上面格式化的字符串 (5认同)

Mih*_*rtu 63

使用char* strncpy(char* dest, char* src, int n)<cstring>.在您的情况下,您将需要使用以下代码:

char* substr = malloc(4);
strncpy(substr, buff+10, 4);
Run Code Online (Sandbox Code Playgroud)

在完整的文档strncpy的功能在这里.

  • 如果这样做,请不要忘记添加空终止字符'\ 0'. (31认同)
  • 如果你这样做,不要忘记malloc the substr足够大. (13认同)

Mil*_*lan 8

你可以用strstr.这里的示例代码

请注意,返回的结果不是以null结尾.

  • 这与正常的子字符串操作相反 - 更像是indexOf. (11认同)

Pau*_*l R 7

你可以使用strstr()<string.h>

$ man strstr