为什么打印带有 %s 的字符每次都会出现段错误?
#include <stdio.h>
int main()
{
char c = 'a';
printf("%s",c);
return 0;
}
如果可能是因为没有得到 '\0' 并且除非访问只读内存位置,否则它会继续读取,为什么这种情况一直发生? (因为它应该像这段代码那样(很可能)在某个地方得到\0
#include <stdio.h>
int main()
{
char c[2];
c[0] = 'a';
c[1] = 'a'; //skipping '\0'
printf("%s",c); //aa..(then some random output)
return 0;
}
抱歉,如果这个问题很愚蠢,我只是个初学者。
最佳答案
Why does printing a character with %s gives a segmentation fault everytime?
因为 %s
告诉 printf
参数是一个指向字符串的指针,并且因为大多数现代系统保护低地址内存不受所有访问(以防止此类错误未被发现)。
当您将 'a'
传递给 printf
时,它会得到一个值 0x41
(ASCII
代码a
), 将该值解释为一个指针,它指向内存的最低页面,该页面受禁止访问保护 -> SIGSEGV
.
关于c - 为什么打印带有 %s 的字符会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55507655/