为什么在C中使用错误的格式说明符会使我的程序在Windows 7上崩溃?

aus*_*ete 14 c string gcc windows-7

我的计划如下;

#include <stdio.h>
#include <string.h>

int main()
{
        char string[] = "Gentlemen start your engines!";
        printf("That string is %s characters long.\r\n", strlen(string));
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在gcc下编译,虽然它没有给我任何错误,但程序每次运行时都会崩溃.从我见过的例子来看,代码似乎很好.很高兴知道我做错了什么.

谢谢.

Pra*_*rav 16

使用不正确的格式说明符printf()调用未定义的行为.正确的格式说明符应该是%zu(不是%d)因为返回类型strlen()size_t

注意:长度修饰符zin %zu表示长度相同的整数size_t


Mic*_*der 7

你有错误的格式说明符.%s用于字符串,但你传递size_t(strlen(string)).使用不正确的格式说明符printf()调用未定义的行为.请%zu改用,因为返回类型strlen()size_t.

所以改变

 printf("That string is %s characters long.\r\n", strlen(string));
Run Code Online (Sandbox Code Playgroud)

至:

 printf("That string is %zu characters long.\r\n", strlen(string));
Run Code Online (Sandbox Code Playgroud)

由于您正在使用,请gcc查看此处以获取有关可传递给的更多信息printf