#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循环外检查时它没有任何东西。
然后
为什么呢?
答案 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)
将返回零,因此第二个循环的主体将执行零次。