While 루프가 예기치 않게 종료 됨 (C / C ++)

변경 일

나는 단순히 무엇이 잘못되고 있는지 전혀 모른다. 루프를 한 번 반복 한 직후에 종료되는 while 루프 (코드 블록 1)가 있습니다. 나는 전체 switch 문을 주석 처리하여 printf(...)scanf(...)남아 있고 루프가 종료되는 것처럼 보입니다.

루프 :

int main(int argc, char *argv[]) {
if(argc != 2) {
    printf("Usage requires hostname\n");
    return 1;
}

TCPClient client;
char str[1];
unsigned char buf[BUFLEN];
bool run = true;

printf("The commands in use are:\n"
    "h - help\n"
    "r - read ENCs (incremental)\n"
    "x - exit\n");

while(run) {
    printf("Enter a command: ");
    scanf("%s", str);

    switch(str[0]) {
      case 'h':
        printf("The commands in use are:\n"
            "h - help\n"
            "r - read ENCs (incremental)\n"
            "x - exit\n");
        break;

      case 'r':
        client.recvData(argv[1], buf, BUFLEN);

        for(int i = 0; i < BUFLEN / 4; i++) {
            if(i % 3 == 0)
                printf("\n");

            printf("Encoder %d: %d\t", i, (int)((((buf[4 * i] << 24) | (buf[4 * i + 1] << 16)) | (buf[4 * i + 2] << 8)) | (buf[4 * i + 3])));
        }
        printf("\n");
        break;

      case 'x':
        run = false;
        break;

      default:
        printf("Unrecognized command\n");
        break;
    }
}

return 0;
}

한때 나는

if(run)
    printf("run = true");

while 루프 후에 제어 bool ( run)이 거짓 이기 때문에 중단되었는지 확인합니다 . 결과는 출력이 없었으며, 이는 어떻게 든 run거짓이 되었음을 나타냅니다 . 이것은 입력이 무엇이든 상관없이 또는 switch 문이 없어도 발생합니다.이 경우 아무것도 run거짓이 되어서는 안됩니다 .

정말 이상한 것은 다른 파일에서 실제로 작동하는 것을 제외하고는 비슷한 루프가 있다는 것입니다.

void *control(void *arg) {
DAC dac(5);
char str[1];
int chan = -1;
uint16_t code = -1;

while(run) {
    printf("Enter a command: ");
    scanf("%s", str);

    switch(str[0]) {
      case 'h':
        printf("The commands in use are:\n"
            "h - help\n"
            "s - set DACs\n"
            "r - read ENCs (incremental)\n"
            "t - read ENCs (cumulative)\n"
            "q - Toggle the quadrature waveform\n"
            "x - exit\n");
        break;

      case 's':
        chan = code = -1;

        printf("Enter the DAC channel: ");
        scanf("%d", &chan);

        printf("Enter the value: ");
        scanf("%hu", &code);

        pthread_mutex_lock(&lock);
        dac.setDAC(chan, code);
        pthread_mutex_unlock(&lock);
        break;

      case 'r':
        pthread_mutex_lock(&lock);
        for(int i = 0; i < BUFLEN; i++) {
            if(i % 3 == 0)
                printf("\n");
            printf("Encoder %d: %d\t", i, incBuf[i]);
            incBuf[i] = 0;
        }
        printf("\n");

        pthread_mutex_unlock(&lock);
        break;

      case 't':
        pthread_mutex_lock(&lock);
        for(int i = 0; i < BUFLEN; i++) {
            if(i % 3 == 0)
                printf("\n");
            printf("Encoder %d: %ld\t", i, cumBuf[i]);
        }
        printf("\n");

        pthread_mutex_unlock(&lock);
        break;

      case 'q':
        runSignal = !runSignal;
        if(runSignal)
            printf("Quadrature waveform enabled\n");
        else
            printf("Quadrature waveform disabled\n");

        break;

      case 'x':
        run = false;
        break;

      default:
        printf("Unrecognized command\n");
        break;
    }
}

dac.reset();
pthread_exit(NULL);
}

나는 무슨 일이 일어나고 있는지 꽤 길을 잃었다 ...

그리 예쉬 차우 한

동안 루프에서 scanf("%s", str);의 선언이 있기 때문에 잘못 str[]이다 char str[1];(크기가 하나 같이)는 하나의 문자를 저장할 수 있습니다. 그러나 scanf()최소 2 자 ( \0)를 저장합니다. 두 개의 문자로 구성되어 c있기 때문에 상점 만 입력한다고 가정 하고 두 번째는 버퍼 오버플로를 유발합니다 .C 표준에 따라 정의되지 않은 동작입니다."c"c\0

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ While 루프가 예기치 않게 종료 됨

분류에서Dev

C 프로그램이 예기치 않게 종료 됨

분류에서Dev

Chromedriver가 예기치 않게 종료 됨

분류에서Dev

XQuartz가 예기치 않게 종료 됨

분류에서Dev

while 루프가 조기에 종료 됨

분류에서Dev

c 프로그램이 잘 컴파일되지만 예기치 않게 종료 됨

분류에서Dev

스레드가 예기치 않게 종료됩니다. C ++

분류에서Dev

Hadoop Mapreduce Wordcount 예제가 예기치 않게 종료 됨

분류에서Dev

노틸러스가 예기치 않게 종료 됨

분류에서Dev

Xcode 오류 보고서 Xcode가 예기치 않게 종료 됨

분류에서Dev

Windows 7-64 컴퓨터가 예기치 않게 종료 됨

분류에서Dev

노틸러스가 예기치 않게 종료 됨

분류에서Dev

Software Updater가 예기치 않게 종료 됨

분류에서Dev

Xcode 7.2가 예기치 않게 종료 됨

분류에서Dev

Android Studio가 예기치 않게 종료 됨

분류에서Dev

C ++ : While 루프가 NULL로 종료되지 않는데 뭔가 빠졌나요?

분류에서Dev

C 함수 변수가 예기치 않게 변경됨

분류에서Dev

Objective C do while 루프가 거짓 조건에서 종료되지 않음

분류에서Dev

do-while 루프가 C에서 종료되지 않습니다.

분류에서Dev

C-For 루프가 첫 번째 반복 후 일찍 종료 됨

분류에서Dev

Pyppeteer : 브라우저가 AWS Lambda에서 예기치 않게 종료 됨

분류에서Dev

while (cin >> s) 루프를 종료합니다. 가속화 된 C ++

분류에서Dev

스레드 호출 스택의 변수가 예기치 않게 변경됨 c

분류에서Dev

포인터 목록 C ++ opencv attrubuts가 예기치 않게 변경됨

분류에서Dev

파이썬 게임 : lives_left가 너무 빨리 떨어지고 게임이 예기치 않게 종료 됨

분류에서Dev

XAMPP- MYSQL이 예기치 않게 종료 됨

분류에서Dev

Ubuntu 11.10이 무작위로 예기치 않게 종료 됨

분류에서Dev

ASP.NET 2.0 세션이 예기치 않게 종료 됨

분류에서Dev

작업이 예기치 않게 종료 됨

Related 관련 기사

  1. 1

    C ++ While 루프가 예기치 않게 종료 됨

  2. 2

    C 프로그램이 예기치 않게 종료 됨

  3. 3

    Chromedriver가 예기치 않게 종료 됨

  4. 4

    XQuartz가 예기치 않게 종료 됨

  5. 5

    while 루프가 조기에 종료 됨

  6. 6

    c 프로그램이 잘 컴파일되지만 예기치 않게 종료 됨

  7. 7

    스레드가 예기치 않게 종료됩니다. C ++

  8. 8

    Hadoop Mapreduce Wordcount 예제가 예기치 않게 종료 됨

  9. 9

    노틸러스가 예기치 않게 종료 됨

  10. 10

    Xcode 오류 보고서 Xcode가 예기치 않게 종료 됨

  11. 11

    Windows 7-64 컴퓨터가 예기치 않게 종료 됨

  12. 12

    노틸러스가 예기치 않게 종료 됨

  13. 13

    Software Updater가 예기치 않게 종료 됨

  14. 14

    Xcode 7.2가 예기치 않게 종료 됨

  15. 15

    Android Studio가 예기치 않게 종료 됨

  16. 16

    C ++ : While 루프가 NULL로 종료되지 않는데 뭔가 빠졌나요?

  17. 17

    C 함수 변수가 예기치 않게 변경됨

  18. 18

    Objective C do while 루프가 거짓 조건에서 종료되지 않음

  19. 19

    do-while 루프가 C에서 종료되지 않습니다.

  20. 20

    C-For 루프가 첫 번째 반복 후 일찍 종료 됨

  21. 21

    Pyppeteer : 브라우저가 AWS Lambda에서 예기치 않게 종료 됨

  22. 22

    while (cin >> s) 루프를 종료합니다. 가속화 된 C ++

  23. 23

    스레드 호출 스택의 변수가 예기치 않게 변경됨 c

  24. 24

    포인터 목록 C ++ opencv attrubuts가 예기치 않게 변경됨

  25. 25

    파이썬 게임 : lives_left가 너무 빨리 떨어지고 게임이 예기치 않게 종료 됨

  26. 26

    XAMPP- MYSQL이 예기치 않게 종료 됨

  27. 27

    Ubuntu 11.10이 무작위로 예기치 않게 종료 됨

  28. 28

    ASP.NET 2.0 세션이 예기치 않게 종료 됨

  29. 29

    작업이 예기치 않게 종료 됨

뜨겁다태그

보관