【发布时间】:2014-05-28 11:32:07
【问题描述】:
首先,我知道在这种情况下使用 malloc 是不好的做法;我只是好奇为什么下面的代码不起作用(从逻辑上讲,没有编译或运行时错误)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//function to remove n number of characters from replicated string
char* remove_beginning(int n, char a[], int size)
{
int i;
char *p=malloc(size-(1+n));
for(i = n ;i < size-1; i++)
{
p[i] = a[i];
}
return p;
}
int main(){
char *str = "123456789";
char *second = remove_beginning(5, str, strlen(str));
printf("%s\n", second);
return 0;
}
【问题讨论】:
-
在哪些方面不起作用?
-
它不打印任何东西
-
我认为 p[i] 应该是 p[i-n]。另外,不要忘记最后的 null。
-
在传递字符串长度时建议避免使用参数名
size。或者用remove_beginning(5, str, strlen(str) + 1);调用函数
标签: c string pointers heap-memory