2016-04-24 114 views
-2
#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

欢迎来到C,你需要做你自己的内存分配。你不能将字符串复制到一个空数组char temp或者一个未初始化的指针char * temp中。你必须决定你想要多少空间,并且明确地分配那么多:'char temp [100]'或'char * temp = malloc(100)'。 –

回答

1

这两个代码都是错误的。

第一只分配1个字符空间temp但拷贝2.

第二采用一个字符串的地址字面和写入字符串通过该地址常量。字符串文字是只读的,所以这可能会崩溃。

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