- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试复制一个 strcopy() 函数,该函数在 ANSI-C 中处理整数数组,作为熟悉函数的练习。这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int array[10] = {0,2,3,4,5,6,7,8,9,10};
int * pointer1;
int * pointer2 = malloc(10 * sizeof(int));
int i;
//assign first pointer
pointer1 = array;
//print pointer1
printf("Pointer1's array : \n");
for(i=0;i<10;i++)
{
printf("%d ",*(pointer1+i));
}
printf("\n");
//copy pointer1 to pointer2
intCopy(pointer1,pointer2);
//print pointer2's array
printf("Pointer2's array: \n");
for(i=0;i<10;i++)
{
printf("%d ",*(pointer2+i));
}
printf("\n");
free(pointer2);
return 0;
}
//copy an integer array
int intCopy(int * input, int * output)
{
//copy input to ouput element by element
while((*output++=*input++) != '\0')
{
//copy each element until null terminator is found;
output++;
input++;
}
return 0;
}
该代码假设使 pointer2 的行为类似于 pointer1,但具有数组的新副本。
但是,当我尝试打印 pointer2 应该能够指向的整数时,我得到了这个:-
Pointer2 的数组:
0 0 0 0 0 0 0 0 0 0
我直接从教科书上复制了 strcopy 的代码,不知道如何只复制第一个
元素复制成功。感谢您的帮助。
编辑:我删除了在 intCopy() 函数中完成的额外增量,输出仍然相同。
最佳答案
2个问题:
1) 将指针递增两次,@pablo1977 也指出只需要一次
while((*output++=*input++) != '\0') {
// output++; // delete these 2 lines
// input++;
}
2) 要复制的数组的第一个元素为 0。这在 intCopy()
int array[10] = {0,2,3,4,5,6,7,8,9,10};
// --------------^
C 中的字符串是 char
的数组,最多包含终止符 '\0'
。要使用 int
数组模拟“int 字符串”,int
数组还需要以 0
结尾。 OP 提供的数组的第一个 元素是0
,因此仅复制第一个元素0
。由于 OP 还打印出另外 9 个“0”,因此后面的 9 个值恰好是 0
,因为这是 UB。
OP 需要将元素的数量传递给 intCopy()
(这样数组就不需要以 0
结尾,并且可以包含 0
元素。)或确保源数组具有终止 0
(在这种情况下,第一个 0
也是最后一个元素)。 OP 做了第二个,但终止 0
也是第一个元素。
与任何此类复制一样,编码也能确保目标大小足够。
关于c - 复制整数数组的 strcopy 函数版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098506/
这个问题已经有答案了: I can use more memory than how much I've allocated with malloc(), why? (17 个回答) 已关闭 8 年前
void strcopy(char *src, char *dst) { int len = strlen(src) - 1; dst = (char*)malloc(len); whil
我尝试复制一个 strcopy() 函数,该函数在 ANSI-C 中处理整数数组,作为熟悉函数的练习。这是我写的代码: #include #include int main() { int
这里是strCopy的一个实现 void strcopy2(char *dst, char const *src){ while ((*dst++ = *src++)) ; }
几天前我刚刚开始用 C 语言编程,现在我正在尝试学习结构。 我有这个程序,但不幸的是由于某种原因我没有编译。我花了很多时间试图修复它,但我似乎找不到任何问题。 以下是我遇到的编译错误: arrays.
只是一个愚蠢但快速的问题:为什么一些使用 c 风格字符串的函数,例如:fgets、strcpy、strcat 等,当参数列表中有一个变量存储输出?即,为什么会这样: char *strcat ( ch
我是一名优秀的程序员,十分优秀!