메시지 큐를 이용하는 소스인데여

0
points

메시지큐를 이용하여 송신하는 쪽의 소스인데여 굵은 표시한 부분대로 하면 키보드로 입력받게 되는데

키보드로 입력받지 않고 제가 변수를 미리 설정해서(ex : char c;) 사용하게 된다면 어떤 식으로

굵은 부분의 소스를 어떻게 고쳐야 하나요.

제가 고친 부분은 아래와 같은데 이게 맞나요?
char c;
fgets(buffer, BUFSIZ, c);
strcpy(some_data.some_text, buffer);

////////////////////////////////////////////////////////////////////////////////
#include
#include
#include
#include
#include

#include
#include
#include
#define MAX_TEXT 512

struct my_msg_st {
long int my_msg_type;
char some_text[MAX_TEXT];
};

int main()
{
int running = 1;
struct my_msg_st some_data;
int msgid;
char buffer[BUFSIZ];
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);

if (msgid == -1) {
fprintf(stderr, "msgget failed with error: %d\n", errno);
exit(EXIT_FAILURE);
}

while(running) {
printf("Enter some text: ");
fgets(buffer, BUFSIZ, stdin);
some_data.my_msg_type = 1;
strcpy(some_data.some_text, buffer);
if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1) {
fprintf(stderr, "msgsnd failed\n");
exit(EXIT_FAILURE);
}
if (strncmp(buffer, "end", 3) == 0) {
running = 0;}
}

exit(EXIT_SUCCESS);
}

irondog의 이미지
1895
points

char c; fgets(buffer,

0
points

char c;
fgets(buffer, BUFSIZ, c);
strcpy(some_data.some_text, buffer);

fgets()의 세번째 파라미터가 char가 아닌 char*라야 맞겠죠.
그래서 다음과 같이 해야 오류가 없습니다.

char c;
fgets(buffer, sizeof(c), &c);
strcpy(some_data.some_text, buffer);

동작에는 문제가 없을 것 같은데 좋은 코드는 아니군요.

그리고 받는 쪽에서 char라는 것을 명확히 안다면 문제가 안되겠지만 어떤 사이즈인지 알수 없고 문자열의 사이즈가 바뀐다면 다음과 같이 하는 것도 좋습니다.

char *str = "a";
fgets(buffer, BUFSIZ, str);
strcpy(some_data.some_text, buffer);

이렇게 하면 문자열 다음의 NULL값도 복사 될테니 큐 값을 가져가는 쪽에서도 좋을 것 같습니다.

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.