簡體   English   中英

為什么在C中使用錯誤的格式說明符會使我的程序在Windows 7上崩潰?

[英]Why does using the wrong format specifier in C crash my program on 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;
}

我正在gcc下編譯,雖然它沒有給我任何錯誤,但程序每次運行時都會崩潰。 從我見過的例子來看,代碼似乎很好。 很高興知道我做錯了什么。

謝謝。

printf()使用不正確的格式說明符調用未定義的行為。 正確的格式說明符應該是%zu (而不是%d ),因為strlen()的返回類型是size_t

注意: %zu長度修飾符z表示長度與size_t相同的整數

你有錯誤的格式說明符。 %s用於字符串,但是您傳遞的是size_tstrlen(string) )。 printf()使用不正確的格式說明符會調用未定義的行為 請改用%zu因為strlen()的返回類型是size_t

所以改變

 printf("That string is %s characters long.\r\n", strlen(string));

至:

 printf("That string is %zu characters long.\r\n", strlen(string));

由於您正在使用gcc查看此處以獲取有關可傳遞給printf更多信息

 printf("That string is %d characters long.\r\n", strlen(string));

代替:

 printf("That string is %s characters long.\r\n", strlen(string));

你在這里有一個問題printf("That string is %s characters long.\\r\\n", strlen(string));

printf("That string is %d characters long.\\r\\n", strlen(string)); %d因為你要打印str的長度(strlen返回數字)

程序崩潰,因為格式化例程嘗試訪問地址0x0000001D處的字符串,這是strlen()的結果,其中沒有像字符串那樣,可能根本就沒有可訪問的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM