반응형

C 34

왜 strdup이 사악하다고 여겨지나요?

왜 strdup이 사악하다고 여겨지나요? 저는 몇 개의 포스터를 봤습니다.strdup사악합니다. 이 에 대해서가 이루어집니까?이에 대한 합의가 이루어졌나요?아무런 죄책감 없이 사용했는데 사용하는 것보다 더 나쁠 이유가 없습니다.malloc/memcpy. 내가 생각할 수 있는 유일한 것은strdup호출자가 이를 오용할 수 있다는 것이 평판입니다(예: 반환된 메모리의 여유를 확보해야 한다는 것을 깨닫지 못합니다. 스트래킷으로 문자열의 끝까지 스트래킷을 시도합니다.그러나 몰로크 끈은 오남용의 가능성으로부터 자유롭지 못합니다. 질문이 도움이 되지 않는다고 생각하는 분들께 답변과 사과를 해주셔서 감사합니다(마감 투표).답변 내용을 종합해보면, 일반적인 느낌은 없는 것 같습니다.strdup그 자체로 사악하지만, C..

source 2023.10.29

C와 C++ 컴파일러가 명시적으로 초기화된 글로벌 변수와 기본 초기화된 글로벌 변수를 서로 다른 세그먼트에 배치하는 이유는 무엇입니까?

C와 C++ 컴파일러가 명시적으로 초기화된 글로벌 변수와 기본 초기화된 글로벌 변수를 서로 다른 세그먼트에 배치하는 이유는 무엇입니까? C 프로그램의 메모리 레이아웃에 대한 이 멋진 글을 읽고 있었습니다.기본 초기화된 전역 변수는 BSS 세그먼트에 존재하며 전역 변수에 값을 명시적으로 제공하면 데이터 세그먼트에 존재합니다. 저는 이 동작을 조사하기 위해 C와 C++의 다음 프로그램을 테스트했습니다. #include // Both i and s are having static storage duration int i; // i will be kept in the BSS segment, default initialized variable, default value=0 int s(5); // s will be..

source 2023.10.29

구조 부재를 오프셋으로 가져오거나 설정하려면 어떻게 해야 합니까?

구조 부재를 오프셋으로 가져오거나 설정하려면 어떻게 해야 합니까? 패딩/정렬 문제를 무시하고 다음과 같은 구조를 고려할 때, 멤버 이름을 사용하지 않고 member_b 값을 얻고 설정하는 가장 좋은 방법은 무엇입니까? struct mystruct { int member_a; int member_b; } struct mystruct *s = malloc(sizeof(struct mystruct)); 다른 말로 하자면, 다음을 포인터/오프셋으로 어떻게 표현하시겠습니까? s->member_b = 3; printf("%i",s->member_b); 내 추측으로는 member_a의 크기를 구하여 오프셋을 계산합니다(int) 구조를 단일 단어 포인터 유형으로 캐스트(char?) 창조하다, 창안int포인터를 가리키고..

source 2023.10.29

중첩 함수 구현

중첩 함수 구현 최근에 gcc에서 nested function의 정의가 가능하다는 것을 알게 되었습니다.제 생각에 이것은 멋진 기능이지만 어떻게 구현해야 할지 궁금합니다. 컨텍스트 포인터를 숨겨진 인수로 전달함으로써 중첩 함수의 직접 호출을 구현하는 것은 확실히 어렵지 않지만, gcc는 또한 이 포인터를 중첩 함수로 전달하여 컨텍스트의 중첩 함수를 호출할 수 있는 임의의 다른 함수로 전달할 수 있습니다.중첩 함수를 호출하는 함수는 호출할 중첩 함수의 유형만 있기 때문에 컨텍스트 포인터를 전달할 수 없습니다. 하스켈과 같이 좀 더 복잡한 호출 규약을 가진 다른 언어들은 부분적으로 그러한 것들을 지원하는 것을 허용하지만, C에서는 그런 것을 할 방법이 없습니다.이것을 어떻게 구현할 수 있습니까? 다음은 문제..

source 2023.10.29

휴대용 비교 및 스왑(원자 작동) C/C++ 라이브러리?

휴대용 비교 및 스왑(원자 작동) C/C++ 라이브러리? 여러 컴파일러 간에 이동이 가능한 매크로 또는 함수로 다양한 프로세서의 CAS와 같은 작업을 랩핑하는 작은 라이브러리가 있습니까? PS. atomic.hpp 라이브러리가 boost::interprocess::detail 네임스페이스 내부에 있습니다.저자는 공공의, 잘 관리되는 도서관으로 만드는 것을 거부합니다. 질문을 다시 열고 다른 옵션이 있는지 알아보겠습니다.OPA(Open Portable Atomics)는 당신의 요구에 적합할 것입니다.https://trac.mcs.anl.gov/projects/openpa/ MIT 스타일 라이센스로 여러 플랫폼에 걸쳐 공통 원자 작업에 일관된 C API를 제공합니다.그 도서관은 작고 당신의 크기에 맞는 것이..

source 2023.10.24

Python에서 PyObject란 무엇입니까?

Python에서 PyObject란 무엇입니까? 쇼트 버전 저는 최근에 함수에 대한 반환 유형이 다음과 같이 지정된 파이썬 코드를 발견했습니다.PyObject문서에.A란 무엇입니까?PyObject? 상세버전 저는 C/C++ 프로그래머는 아니지만 우연히 만났을 때PyObject위에 링크된 문서에서, 구글은 나에게 다음을 가르쳐 주었습니다.PyObject는 Python/C API를 사용하여 정의된 Python 개체입니다.구체적으로 API 문서에서는 다음과 같이 PyObject를 정의합니다. 모든 개체 유형은 이 유형의 확장입니다.이것은 Python이 개체에 대한 포인터를 개체로 취급하는 데 필요한 정보를 포함하는 유형입니다.일반적인 "릴리스" 빌드에서는 개체의 참조 개수와 해당 유형의 개체에 대한 포인터만 포..

source 2023.10.24

Linux에서 가장 빠른 화면 캡처 방법

Linux에서 가장 빠른 화면 캡처 방법 이 질문은 이 질문과 비슷합니다. 가장 빠른 화면 캡처 방법 리눅스/X11용입니다. 좀 더 구체적으로 말하자면, X11 다이플레이에서 실행되는 하나의 윈도우(윈도우의 알트 프린트 스크린에 해당하는 프로그램)의 픽셀 이미지를 캡처하는 방법이 필요합니다. 참고 및 요구사항: 1) 캡처 중인 창 위에 새 창을 놓더라도 픽셀 이미지는 아무런 폐색 없이 원래 응용 프로그램 창을 가리켜야 합니다. 2) 사용자가 애플리케이션 창을 볼 필요는 없으며, 비디오 목적으로 픽셀 버퍼/images만 저장하면 됩니다. 제가 조사한 다른 대안들은 다음과 같습니다. 1) xvfb - 작동하지만 CPU 렌더링을 수행하므로 느리고 좋은 GPU를 낭비합니다. 2) 많은 lxc 내부의 x11 - ..

source 2023.10.24

"브레이크"는 "for", "where", "do-here", "switch", "if"문에만 작동합니까?

"브레이크"는 "for", "where", "do-here", "switch", "if"문에만 작동합니까? 예를 들어, 제게ifA 내부의 진술for루프: for( ; ; ) { if( ) { printf(" inside if"); break; }//if printf("inside for"); }//for 자, 이제, 윌.break문장은 컴파일러가 밖으로 나오게 합니다.for루프 또는 그것은 오직 몸에서 나올 것입니다.if일단 병세가 악화되면if만족하게 되십니까?그break문은 가장 가까운 엔클로저 루프 또는 스위치 문에서 발생합니다. break에서 벗어나지 않습니다.if가장 가까운 곳에 있는 진술loop아니면switch라는 내용을 담고 있는if진술.한 번도 헤어지지 않은 이유는if진술은 당신이 탈출하기를..

source 2023.10.19

문자열에서 사용하는 문자 셀의 수

문자열에서 사용하는 문자 셀의 수 UTF-8 문자열을 사용하여 텍스트 표를 출력하는 프로그램이 있는데 문자열에서 사용하는 단좌표 문자 셀의 수를 측정해야 제대로 정렬할 수 있습니다.가능하다면 표준 기능으로 하고 싶습니다.UTF-8 및 Unix/Linux용 Unicode FAQ: 를 사용하여 휴대용 방식으로 C로 문자 수를 셀 수 있습니다.mbstowcs(NULL,s,0). 이것은 적절한 로케일이 선택되어 있는 한 다른 지원되는 인코딩과 마찬가지로 UTF-8에서도 작동합니다.UTF-8 문자열의 문자 수를 세는 유선 연결된 기술은 0x80 ~ 0xBF 범위의 바이트를 제외한 모든 바이트를 세는 것입니다. 이는 고유의 문자가 아닌 연속 바이트일 뿐이기 때문입니다.그러나 문자 수를 셀 필요성은 애플리케이션에서 ..

source 2023.10.14

glibc의 fclose(NULL)이 오류를 반환하지 않고 세그먼트화 오류를 발생시키는 이유는 무엇입니까?

glibc의 fclose(NULL)이 오류를 반환하지 않고 세그먼트화 오류를 발생시키는 이유는 무엇입니까? .fclose(3): 반환 값 성공적으로 완료되면 0이 반환됩니다. 않으면,면,EOF수.errno오류를 나타내도록 설정됩니다.또 스(함) )fclose()스트림에 대해 정의되지 않은 동작이 발생합니다. 오류 EBADF 파일 :fp유효하지 않습니다. fclose()다를 .errno된 오류가 확인합니다.close(2),write(2)아니면fflush(3). 이야입니다.fclose(NULL)합니다를 합니다.errno분할 결함에 의해 직접 죽는 대신 일반적으로.이런 행동에 무슨 이유라도 있습니까? 미리 감사드립니다. 를 합니다).strerror()),). FILE *not_exist = NULL; not_..

source 2023.10.14
반응형