为什么我的printf这样做?

时间:2015-09-25 18:55:10

标签: c printf

这似乎是一件很愚蠢的事情,但我真的不知道为什么会这样。可能是它几乎凌晨5点,我仍然这样做但是......

它应该打印-CA,但为什么当我编译它时,它正在打印

-
CA?

而不是-CA,在任何地方都没有'\ n'。 你们能想出任何可以解释它的逻辑吗?

int main(int argc, char* argv[]){

int check = 0;
char *thing = (char*)malloc(2 * sizeof(char));

strcpy(char, "CA");

some code..

   do{

    more code...

    if(condition== 1) {
            more code.... 
            if(check == 0) { 
                printf("-");
                check++;
            }


    if (some conditon != NULL){
        printf("%s\n",thing);
    }while(condition)


return 0;

}

2 个答案:

答案 0 :(得分:4)

您没有为字符串分配足够的空间。每个字符串都有一个空终止符,因此一个2字符的字符串在数组中需要3个字节。当strcpy()复制空字节时,thing正在写char *thing = malloc(3); 数组的边界之外,这会导致未定义的行为。

使用

strdup()

您还可以使用char *thing = strdup("CA"); ,它在动态内存中创建一个字符串的副本,根据原始字符串的长度自动分配足够的空间。

$urlRouterProvider.otherwise('//recentStudies');

答案 1 :(得分:1)

printf将空终止字符串输出到stdout。如果sting不是null终止,printf将继续向stdout打印垃圾,直到满足null终止符 所以你应该把所有人都放到你的角色阵列

char thing[3] = {'C','A',0};

现在printf将打印

-
CA