下面是程式
#include <stdio.h>
#include <stdlib.h>
void mymemcpy(void *f_dst, void *f_src, int n) {
int j = 0;
char *src = (char *)f_src;
char *dst = (char *)f_dst;
for (j = 0; j < n; j ) {
dst[j] = src[j];
}
dst[j] = "\0";
}
int main() {
int i = 0;
char src[100] = "HELLO WORD";
char dst[100];
mymemcpy(dst, src, 10);
for (i = 0; i < 10; i ) {
printf("%c\t", dst[i]);
}
printf("\n%s", dst);
return 0;
}
我得到如下輸出
H E L L O W O R D
HELLO WORD$u
為什么我在第二行輸出中得到額外的兩個字符,即使在函式中我用空字符終止了字串?
uj5u.com熱心網友回復:
有多個問題:
dst[j] = "\0";不設定空終止符:您嘗試將字串指標存盤到char. 您應該改為使用字符常量,如dst[j] = '\0';memcpy不會在目標陣列末尾寫入任何內容。mymemcopy可能也不應該。您應該改為設定空終止符main或將最大字符數傳遞給printf.
這是修改后的版本:
#include <stdio.h>
void mymemcpy(void *f_dst, const void *f_src, size_t n) {
size_t j = 0;
unsigned char *src = (unsigned char *)f_src;
unsigned char *dst = (unsigned char *)f_dst;
for (j = 0; j < n; j ) {
dst[j] = src[j];
}
}
int main() {
int i = 0;
char src[100] = "HELLO WORD";
char dst[100];
mymemcpy(dst, src, 10);
for (i = 0; i < 10; i ) {
printf("%c\t", dst[i]);
}
printf("\n%.10s\n", dst);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488806.html
