我的程序中遇到問題。我正在從無限循環的標準輸入讀取它工作正常,但是當我把超過4096個字符寫入標準輸入時,它開始行事不好,我真的不知道爲什麼。是getc有限?我,我要把你在這裏輸入和輸出DOR ilustrationgetc讀取超過4096個字符時出錯
#define NFDS 1
#define h_addr h_addr_list[0]
#define BUFFER_LEN 4096
void *sending(void *arguments)
{
struct arg_struct *args = arguments;
int i = 0, j = 1;
if(signal(SIGINT, receive_signal) == SIG_ERR) {
fprintf(stderr, "Error setting signal handler for SIGINT.\n");
}
fd_set myset;
struct timeval tim;
int result;
int data_cap = 4096;
while(running)
{
tim.tv_sec = 0;
tim.tv_usec = 500;
FD_ZERO(&myset);
FD_SET(STDIN_FILENO, &myset);
result = select(STDIN_FILENO + 1, &myset, NULL, NULL, &tim);
if(result != 0)
{
str = calloc(data_cap,sizeof(char));
while((c = getc(stdin)) != '\n')
{
if (j >= data_cap)
{
str = realloc(str,sizeof(char) * data_cap * 2);
data_cap = data_cap * 2;
}
str[i] = c;
i++;
j++;
}
if (j >= data_cap)
{
str = realloc(str,sizeof(char) * data_cap * 2);
}
str[i] = '\0';
if(strlen(str)!=0)
{
bufferIn = message(args->arg2,str);
if(send(args->arg1,bufferIn,strlen(bufferIn),0) < 0)
{
callError("ERROR: cannot send socked");
}
free(bufferIn);
}
free(str); i = 0; j = 1; data_cap = 4096;
}
}
return NULL;
}
//in main threads
struct arg_struct args;
args.arg1 = client_socket;
args.arg2 = username;
pthread_t t22;
pthread_t t11;
pthread_create(&t22, NULL, &sends, (void *)&args);
pthread_create(&t11, NULL, &reci, (void *)&args);
pthread_join(t22, NULL);
pthread_cancel(t22);
pthread_join(t11, NULL);
pthread_cancel(t11);
輸入例如:AAAAAAAA ..... AAAAAAAAA這是WORD
讓我們來想象有4096序列中的「A」字符從第一個「一」持續「A」 但是當我打印從標準輸入我得到了什麼我得到這個:
這是WORD AAAAAAA ...... AAAAAAA這是WORD
什麼它確實是在第一次,它讀取所有字符f charm。4096. char。在這個例子中,它是「這是這個詞」並首先打印它。比它真正打印它應該首先打印的內容。
所有字符之間沒有行尾符號 在開始我有點不好的內存分配,因爲我分配內存在4096字節,但沒有。我測試了它。 泰克你的任何幫助 對不起,因爲英語
是不是有什麼問題與您的空格鍵?縮進遍佈 –
上面定義了一個名爲'BUFFER_LEN'的宏,其值爲4096.這用於定義一個大小爲4096的字符數組。可以溢出嗎? –
您能否只顯示代碼的相關部分?當真正的問題在更小的代碼塊內時,很難讀取太多的代碼。 – dasblinkenlight