10진 정수 형식(%d, %u, %ld, %lld)에 printf 또는 fprintf를 사용하는 경우 , 지정된 형식이 형식화되는 데이터 유형과 일치하는지 확인하는 것이 중요합니다. 그렇지 않으면 정의되지 않은 동작이 발생할 수 있습니다.
프로그래밍에서 정의되지 않은 동작을 정의하는 것은 다음을 포함하여 광범위한 가능한 결과를 포함하므로 어렵습니다.
다음 코드 조각을 고려하세요.
#include <stdio.h> int main() { long a = 10; long b = 20; printf("%d, %d\n", a, b); }
32비트 아키텍처에서 결과는 예상한 대로입니다. "10, 20". 그러나 64비트 아키텍처에서는 출력이 "10, 2097152"로 변경됩니다.
이러한 예외는 printf가 '%d' 형식 지정자를 int 유형 자리 표시자로 해석하기 때문입니다. 32비트 아키텍처. 그러나 64비트 아키텍처에서는 int가 64비트이므로 긴 값에 대한 변환이 잘못됩니다.
잘못된 형식 문자열을 사용하면 심각한 결과를 초래할 수 있습니다.
위 내용은 printf/fprintf의 잘못된 형식 문자열로 인해 정의되지 않은 동작이 발생할 수 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!