C中的string,如何获取subString

我有一个string:

char * someString; 

如果我想要这个string的前五个字母,并希望将其设置为otherString ,我将如何做?

 #include <string.h> ... char otherString[6]; // note 6, not 5, there's one there for the null terminator ... strncpy(otherString, someString, 5); otherString[5] = '\0'; // place the null terminator 
 char* someString = "abcdedgh"; char* otherString = 0; otherString = (char*)malloc(5+1); memcpy(otherString,someString,5); otherString[5] = 0; 

更新
提示:了解定义的一个好方法叫做左右规则(最后一些链接):

从标识符开始阅读并大声说出“> someString is …”
现在转到someString的右边(语句以分号结尾,没什么可说的)。
现在在标识符( *遇到)=>左边,所以说“…指向…”。
现在到“ * ”的左边(find关键字char )=>说“..char”。
完成!

所以char* someString; =>“someString是一个指向char的指针”。

由于指针只是指向一个特定的内存地址,因此它也可以作为字符“数组”的“起点”。

这适用于任何东西..给它一个去:

 char* s[2]; //=> s is an array of two pointers to char char** someThing; //=> someThing is a pointer to a pointer to char. //Note: We look in the brackets first, and then move outward char (* s)[2]; //=> s is a pointer to an array of two char 

一些链接: 如何解释复杂的C / C ++声明和如何阅读C声明

广义:

 char* subString (const char* input, int offset, int len, char* dest) { int input_len = strlen (input); if (offset + len > input_len) { return NULL; } strncpy (dest, input + offset, len); return dest; } char dest[80]; const char* source = "hello world"; if (subString (source, 0, 5, dest)) { printf ("%s\n", dest); } 

你需要为新stringotherString分配内存。 一般来说,对于长度为n的子string,这样的东西可能适合你(不要忘记做边界检查…)

 char *subString(char *someString, int n) { char *new = malloc(sizeof(char)*n+1); strncpy(new, someString, n); new[n] = '\0'; return new; } 

这将返回someString的前n个字符的子string。 确保在使用free()完成后释放内存。

 strncpy(otherString, someString, 5); 

不要忘记为otherString分配内存。

 #include <stdio.h> #include <string.h> int main () { char someString[]="abcdedgh"; char otherString[]="00000"; memcpy (otherString, someString, 5); printf ("someString: %s\notherString: %s\n", someString, otherString); return 0; } 

如果您不使用printf语句并将常量全部放入常量中,而不是最小的程序,则不需要stdio.h。

一举两得:

 char *otherString = strncpy((char*)malloc(6), someString); otherString[5] = 0; 
 char largeSrt[] = "123456789-123"; // original string char * substr; substr = strchr(largeSrt, '-'); // we save the new string "-123" int substringLength = strlen(largeSrt) - strlen(substr); // 13-4=9 (bigger string size) - (new string size) char *newStr = malloc(sizeof(char) * substringLength + 1);// keep memory free to new string strcpy(newStr, largeSrt, substringLength); // copy only 9 characters newStr[substringLength] = '\0'; // close the new string with final character printf("newStr=%s\n", newStr); free(newStr); // you free the memory 

我认为这是简单的方法…但我不知道如何直接传递结果variables,然后创build一个本地字符数组作为临时工,并返回它。

 char* substr(char *buff, uint8_t start,uint8_t len, char* substr) { strncpy(substr, buff+start, len); substr[len] = 0; return substr; } 

你可以使用snprintf来获取char数组的一个子string。 这是一个名为“substring.c”的文件示例:

 #include <stdio.h> int main() { const char source[] = "This is a string array"; char dest[17]; // get first 16 characters using precision snprintf(dest, sizeof(dest), "%.16s", source); // print substring puts(dest); } // end main 

输出:

这是一个string

注意:

欲了解更多信息,请参阅printf手册页。