#include <stdio.h>
//从第m个字符开始全部复制为另一个字符串.
void
cpy(char *s, char *d, int m) {
int b = 0;
char *p = s;
while(b++ < m - 1)
p++;
if(!p) return; //此时m大于字符串长度.
d = p;
}
int
main(void) {
char *s = "hello world";
char *r = NULL;
cpy(s, r, 5);
printf("%s\n", r);
}
但是我这样改了之后是可以的:
#include <stdio.h>
//从第m个字符开始全部复制为另一个字符串.
char *
cpy(char *s, int m) {
int b = 0;
char *p = s;
while(b++ < m - 1)
p++;
if(!p) return NULL; //此时m大于字符串长度.
return p;
}
int
main(void) {
char *s = "hello world";
char *r = NULL;
r = cpy(s, 5);
printf("%s\n", r);
}
3 个解决方案
#1
调用函数改变一个指针的值,请用
指向指针的指针
#2
跟malloc没关系,第一个用参数返回结果无效所以错误。
#3
#include <stdio.h>
//从第m个字符开始全部复制为另一个字符串.
void cpy(char *s, char **d, int m) {
*d = s+m;
}
int main(void) {
char *s = "hello world";
char *r = NULL;
cpy(s, &r, 5);
printf("[%s]\n", r);//[ world]
return 0;
}
#1
调用函数改变一个指针的值,请用
指向指针的指针
#2
跟malloc没关系,第一个用参数返回结果无效所以错误。
#3
#include <stdio.h>
//从第m个字符开始全部复制为另一个字符串.
void cpy(char *s, char **d, int m) {
*d = s+m;
}
int main(void) {
char *s = "hello world";
char *r = NULL;
cpy(s, &r, 5);
printf("[%s]\n", r);//[ world]
return 0;
}