#include <stdio.h>
#include <string.h>
int main(void){
char s[] = "dog";
char t[] = "house";
char temp[]="";
strncpy(temp, s, 2);
return 0;
}
然后temp是“do”的第一个字符的地址; 我通过char temp []将此代码调整为char * temp 但是这段代码是错误的,为什么呢?
#include <stdio.h>
#include <string.h>
int main(void){
char s[] = "dog";
char t[] = "house";
char *temp;
strncpy(temp, s, 2);
return 0;
}
答案 0 :(得分:1)
两个代码都错了。
第一个仅在temp
中为1个字符分配空格,但复制2个。
第二个获取字符串文字的地址,并通过该地址写入字符串文字。字符串文字是只读的,因此可能会崩溃。
所有这些都是编译器不一定要诊断的错误(技术术语是“行为未定义”)。