这段代码有什么区别

时间:2016-04-24 13:55:56

标签: c

#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;

}

1 个答案:

答案 0 :(得分:1)

两个代码都错了。

第一个仅在temp中为1个字符分配空格,但复制2个。

第二个获取字符串文字的地址,并通过该地址写入字符串文字。字符串文字是只读的,因此可能会崩溃。

所有这些都是编译器不一定要诊断的错误(技术术语是“行为未定义”)。