我正在尝试切割一个字符串并复制这个新的切片部分。
char* makeWord(char *c, int j, int i){
char *s;
s = malloc(sizeof(char)*i-j)
int k;
for (k = 0; k < i - j; k++){
s[k] = c[j+k];
}
printf("%s ", s);
return s;
}
我正在尝试返回一个复制原始字符串相关部分的指针。
最后是打印奇怪的符号。
示例:
c[] = "hello darkness my old friend"
makeWord(c, 0, 5); makeWord(c, 6,14); makeWord(c, 15, 17); makeWord(c, 18, 21);
生成: 你好darknessmt_'3 myP老朋友P
谢谢,抱歉新手问题。
答案 0 :(得分:1)
C中的有效字符串需要空终止符。
您必须malloc()
一个额外的字节来存储它,并在最后一个字符后用\0
关闭字符串。
答案 1 :(得分:0)
如果需要分配一个字符串缓冲区来保存n
个字符,则需要n+1
个字符,另外一个用于终止空字符'\0'
。还记得你必须自己设置终结器。
sizeof(char)
始终由标准定义。
试试这个:
char* makeWord(char *c, int start, int end) {
char *s = malloc(end - start + 1);
if (!s) return NULL;
int k;
for (k = 0; k < end-start; k++){
s[k] = c[start+k];
}
s[k] = '\0';
printf("%s ", s);
return s;
}