C 113

소켓 라이브러리에서 recv를 호출할 때 사용하는 recv 버퍼 크기

소켓 라이브러리에서 recv를 호출할 때 사용하는 recv 버퍼 크기 C 소켓 라이브러리에 대해 몇 가지 질문이 있습니다.다음은 질문에서 참조할 코드 조각입니다. char recv_buffer[3000]; recv(socket, recv_buffer, 3000, 0); recv_buffer 크기를 결정하려면 어떻게 해야 하나요?3000을 사용하고 있지만 임의입니다. 만약의 경우recv()내 버퍼보다 큰 패킷을 수신할 수 있습니까? recv에 다시 전화하지 않고 전체 메시지를 받았는지 확인하고 수신할 것이 없을 때 메시지를 영원히 기다려야 하는지 어떻게 알 수 있습니까? 버퍼에 일정한 공간을 갖지 않고 공간이 부족해질 염려 없이 버퍼를 계속 추가할 수 있는 방법이 있을까요?strcat최신 정보를 연결하다r..

programing 2022.08.11

열거형 변수를 C에서 문자열로 사용하는 쉬운 방법?

열거형 변수를 C에서 문자열로 사용하는 쉬운 방법? 제가 하려는 일은 다음과 같습니다. typedef enum { ONE, TWO, THREE } Numbers; 다음과 같은 스위치 케이스를 실행하는 함수를 작성하려고 합니다. char num_str[10]; int process_numbers_str(Numbers num) { switch(num) { case ONE: case TWO: case THREE: { strcpy(num_str, num); //some way to get the symbolic constant name in here? } break; default: return 0; //no match return 1; } 모든 경우에 정의하는 것이 아니라 위에서와 같이 열거 변수를 사용하여 ..

programing 2022.08.11

구조 정의는 .h 또는 .c 파일로 해야 합니까?

구조 정의는 .h 또는 .c 파일로 해야 합니까? 나는 두 가지 완전한 정의를 모두 보았다.structheader 및 just declarations: 어떤 방식이 다른 방식보다 유리합니까? 차이가 있다면, 난 보통 이런 구조물을 타이핑했어.h typedef struct s s_t; 명확하게 하기 위해 옵션은 헤더 파일의 선언과 클래스의 정의 또는 헤더 파일의 선언과 정의입니다.어느 한쪽이 링크에 의해서라도, 양쪽 모두 같은 사용성을 얻을 수 있을 것입니다. 여기와 같이 거의 중복된 항목이 많이 있지만 정확히 일치하는 항목이 없습니다.이 점에 있어서 제가 틀렸다면 정정해 주세요..h의 함수에 의해 사용되는 경우 해당 파일의 개인 구조는 .c 파일에 저장되며 선언은 .h 파일에 저장되어야 합니다. 공용 구..

programing 2022.08.11

strdup() - C에서 무엇을 합니까?

strdup() - C에서 무엇을 합니까? 의 목적은 무엇입니까?strdup()C에서 기능합니까?C 와 UNIX 가 단어를 할당하는 단축법에 익숙하다고 가정하면 문자열이 중복됩니다. :- ) 실제로는 ISO C 표준(a) 자체의 일부가 아니라는 점에 유의하십시오(POSIX와 동일).다음 코드와 효과적으로 같은 동작을 하고 있습니다. char *strdup(const char *src) { char *dst = malloc(strlen (src) + 1); // Space for length plus nul if (dst == NULL) return NULL; // No memory strcpy(dst, src); // Copy the characters return dst; // Return the ne..

programing 2022.08.09

문자열 리터럴의 "Life-time" (C)

문자열 리터럴의 "Life-time" (C) 다음 함수에 의해 반환된 포인터에 액세스할 수 없는 것은 아닐까요? char *foo(int rc) { switch (rc) { case 1: return("one"); case 2: return("two"); default: return("whatever"); } } 따라서 C/C++의 로컬 변수의 수명은 사실상 함수 내에서만 유지되는 것입니다., , 뒤에 그가 붙으면 그가 됩니다.char* foo(int)종료하면 포인터는 더 이상 아무 의미도 없는 거죠? 지역 변수의 수명이 좀 헷갈리네요.어떤 것이 좋은 설명입니까? 「 」 , 「 」 )입니다.{ ,}가 생성됩니다. 로컬 변수에는 자동 또는 로컬 저장소가 있습니다.작성 범위가 종료되면 자동으로 파기되기 때문..

programing 2022.08.09

기호 \0개에 어떤 의미일까요?

기호 \0개에 어떤 의미일까요? 코드 다음 고려해 보자. char str[] = "Hello\0"; 공백이 배열의 길이 얼마나 많은 0년대 끝난다?sizeof str는 "Hello" 텍스트의 경우7 ~ 5 바이트, 명시적 NUL 터미네이터 및 암묵적 NUL 터미네이터입니다 strlen(str)는 5 - "Hello" 바이트뿐입니다. 여기서 중요한 심지어 문자열 리터럴 그냥 끝까지 될 수 있다는 내재된 nul 종결자 항상 추가이다.\0.물론이야.strlen맨 처음에 멈추다\0- 차이를 구별하지 못합니다. 그 암시적 NUL 종결자 규칙에 한가지 예외-명시적으로 배열 크기를 지정하는 문자열에 맞게 잘리: 있다. char str[6] = "Hello\0"; // strlen(str) = 5, sizeof(str..

programing 2022.08.08

C 또는 C++를 사용하여 디렉토리 내의 파일 목록을 가져오려면 어떻게 해야 합니까?

C 또는 C++를 사용하여 디렉토리 내의 파일 목록을 가져오려면 어떻게 해야 합니까? C 코드 또는 C++ 코드 내부에서 디렉토리 내의 파일 목록을 판별하려면 어떻게 해야 합니까? 이 일을 할 수 .ls명령어를 사용하여 프로그램 내에서 결과를 구문 분석합니다.업데이트 2017: C++17 에서는, 파일 시스템의 파일을 일람 표시하는 공식 방법이 있습니다. std::filesystem다음의 소스 코드와 함께, Shrevardhan으로부터 훌륭한 회답변은 다음과 같습니다. #include #include #include namespace fs = std::filesystem; int main() { std::string path = "/path/to/directory"; for (const auto & en..

programing 2022.08.08

Linux에서 홈 디렉터리 가져오기

Linux에서 홈 디렉터리 가져오기 Linux에서 실행되는 C++ 프로그램에서 사용자 홈 디렉토리를 가져오는 방법이 필요합니다.Unix에서도 같은 코드가 동작한다면 좋을 것 같습니다.나는 HOME 환경 값을 사용하고 싶지 않다. AFAIK, 루트 홈 디렉토리는 /root입니다.root 사용자가 프로그램을 실행하고 있는 경우 이 디렉토리에 파일/폴더를 생성해도 될까요?당신은 필요하다getuid현재 사용자의 사용자 ID를 얻은 후getpwuid사용자의 패스워드 엔트리(홈디렉토리 포함)를 취득하려면 , 다음의 순서를 실행합니다. #include #include #include struct passwd *pw = getpwuid(getuid()); const char *homedir = pw->pw_dir; 주..

programing 2022.08.08

C의 숫자가 음수가 아니더라도 항상 'int'를 사용해야 합니까?

C의 숫자가 음수가 아니더라도 항상 'int'를 사용해야 합니까? 음수가 되어서는 안 되는 값에는 항상 부호 없는 int를 사용합니다.하지만 오늘 코드로 다음과 같은 상황을 알게 되었습니다. void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize, unsigned optionalDataSize ) { If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) { // Optional data fits, so add it to the header. } // BUG! The above includes the optional part even if // mandatoryDataS..

programing 2022.08.08

왜 GCC는 정수 나눗셈을 실장할 때 홀수 곱셈을 사용하는가?

왜 GCC는 정수 나눗셈을 실장할 때 홀수 곱셈을 사용하는가? 에 대해 읽은 적이 있습니다.div그리고.mul조립 작업, 그리고 C:에 간단한 프로그램을 작성함으로써 조립 작업의 실제 모습을 확인하기로 했습니다. 파일 분할.c #include #include int main() { size_t i = 9; size_t j = i / 5; printf("%zu\n",j); return 0; } 다음으로 어셈블리 언어 코드 생성: gcc -S division.c -O0 -masm=intel 하지만 생성된 것을 보면division.s파일에는 div 연산이 포함되어 있지 않습니다!대신 비트 시프트와 매직 넘버로 블랙 마법을 부립니다.여기 코드 조각이 있습니다.i/5: mov rax, QWORD PTR [rbp-..

programing 2022.08.07