我有一个字符串:
char * someString;
Run Code Online (Sandbox Code Playgroud)
如果我想要这个字符串的前五个字母并想要设置它otherString,我该怎么做?
pib*_*pib 53
#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
Run Code Online (Sandbox Code Playgroud)
char* someString = "abcdedgh";
char* otherString = 0;
otherString = (char*)malloc(5+1);
memcpy(otherString,someString,5);
otherString[5] = 0;
Run Code Online (Sandbox Code Playgroud)
更新:
提示:理解定义的一种好方法称为左右规则(最后的一些链接):
从标识符开始读取并大声说出=>" someString是......"
现在转到someString的右边(语句以分号结束,没什么好说的).
现在左边的标识符(*遇到)=>所以说"......指向......".
现在转到左边的" *"(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
Run Code Online (Sandbox Code Playgroud)
一些链接: 如何解释复杂的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);
}
Run Code Online (Sandbox Code Playgroud)
您需要为新字符串otherString分配内存。通常,对于长度为n的子字符串,类似这样的方法可能对您有用(不要忘记进行边界检查...)
char *subString(char *someString, int n)
{
char *new = malloc(sizeof(char)*n+1);
strncpy(new, someString, n);
new[n] = '\0';
return new;
}
Run Code Online (Sandbox Code Playgroud)
这将返回someString的前n个字符的子字符串。完成使用free()的操作后,请确保释放内存。
| 归档时间: |
|
| 查看次数: |
147965 次 |
| 最近记录: |