首先,我知道在这种情况下使用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;
}
答案 0 :(得分:2)
p [i]应该是p [i-n],你还需要复制空值:
#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-(n-1));
for(i = n ;i <= size; i++) {
p[i-n] = a[i];
}
return p;
}
int main(){
char *str = "123456789";
char *second = remove_beginning(5, str, strlen(str));
printf("%s\n", second);
return 0;
}
答案 1 :(得分:1)
您需要更改函数中的循环体和malloc
char *p=malloc(size-(n-1));
for(i = 0 ;i <= size - n; i++)
{
p[i] = a[i+n];
}
答案 2 :(得分:1)
当删除字符串的开头也可以使用strncpy:
char tmp1[20] = "123456789";
char tmp2[20];
strncpy(tmp2, tmp1 + 5, 4);
我知道它并没有直接回答你的问题,但我发布它以显示更好的&#34;删除字符串开头的方法。 strncpy
可用于复制完整的字符串,字符串的开头或结尾。