为什么以下C语言代码提供此输出?

时间:2016-06-02 15:16:35

标签: c string pointers

#include<stdio.h>

void main(){
    char p[20];
    char *s="string";
    int i;
    int length= strlen(s);
    for(i=0;i<length;i++)
        p[i]=s[length-i];  // it shows expected values when checked here, character by character.

    //But, if it's printed as string, it shows blank.
    printf("%s",p);

    //And now, again checking it character by character, it behaves like nothing is stored.
    for(i=0;i<strlen(p);i++)
        printf("%c",p[i]);
    }
}

它什么都不打印。遍历for循环并检查变量p的值时,它会显示预期值;但在for循环外检查时它没有任何东西。 然后 为什么呢?

3 个答案:

答案 0 :(得分:2)

基本上,您正在复制s[length - 0],它会在新字符串的开头复制字符串终止符\0。因此,当打印时,它将停在第一个字符处。

编辑:

而且,正如Sourav Ghosh指出的那样,第二个strlen()将返回0

答案 1 :(得分:2)

第一个作业p[i]=s[length-i]p[0]设置为完成字符串s的空终止符。

因此,尝试在数组printf上使用p将不会输出任何内容。

答案 2 :(得分:1)

s[length-i]时,

'\0'将是i = 0,位于字符串的末尾。

看到它,printf("%s",p);将打印零字符串,strlen(p)将返回零,因此第二个循环的主体将执行零次。