【发布时间】:2015-12-15 08:20:34
【问题描述】:
我试图从数组中间删除一个元素,然后移动整个内容,但我遇到了一些困难,因为我的测试数组不是“正确的”。我通过使用 strcpy 用字符串填充数组来解决问题。 strcpy 上面的注释部分是我之前使用的方法(不起作用)。有人可以解释一下为什么它不起作用吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char *array;
int i=5;
array = (char*)calloc(1024, sizeof(char));
if(array == NULL){
printf("Out of memory\n");
return 0;
}
//array = "Just some test string";
strcpy(array, "Just some test string");
printf("%s\n", array);
memmove(array+i+1, array+i, strlen(array)-i);
array[i] = ',';
printf("%s\n", array);
memmove(array+i, array+i+1, strlen(array)-i);
printf("%s\n", array);
free(array);
return 0;
}
printf 通常在注释部分工作,但是 memmove() 使我的程序崩溃!
【问题讨论】:
-
请不要将
calloc投射到=的右侧。这是不必要的,有时是有害的。 -
您忘记移动空终止符,其他一切正常。当然,如果你扩大这个玩具应用程序,你需要做一些预检查,确保你的移动不会溢出缓冲区,并且
i小于字符串的大小。 -
@Bathsheba 你到底是什么意思?这是符合标准的,否则我会收到警告
-
@M.M 是的,谢谢,这只是一个测试用例:P
标签: c arrays memory-management dynamic-arrays