我想從終端使用參數運行一些代碼。這裏是我的代碼:從命令行參數分割故障(核心轉儲)
int PORT_NUM = 0;
int BYTES_TO_SEND = 0;
char* LocalAddresss = "";
char* concat(char *s1, char *s2)
{
char *result = malloc(strlen(s1)+strlen(s2)+1);
strcpy(result, s1);
strcat(result, s2);
return result;
}
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
char data[BYTES_TO_SEND];
LocalAddresss = concat("192.168.1.",argv[1]);
PORT_NUM = atoi(argv[2]);
BYTES_TO_SEND = atoi(argv[3]);
fflush(stdout);
for(int i = 0; i < BYTES_TO_SEND; i++){
data[i] = 'Z';
}
char* message_to_send = data;
portno = PORT_NUM;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(LocalAddresss);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
while(1){
n = write(sockfd,message_to_send,strlen(message_to_send));
}
close(sockfd);
return 0;
}
我的問題是這樣的。以下工作:命令行上的./TCP_client 16 2000 100
。
這不:./TCP_client 16 2000 3000
我得到「分割故障(核心轉儲)」
有沒有在命令行參數什麼的總字節數限制?我該如何解決這個問題?
使用GDB運行後,它說「在main()中編程接收到的信號SIGBUS,總線錯誤0x0000000100000ccf」但是不確定這是什麼。
c對命令行參數大小沒有限制。這是你的shell強加的。你需要顯示這個'concat'函數在做什麼。這不是一個標準的C函數。字符串連接由'strcat'完成。而且因爲你的失敗者比另一個更長,你可能會在某處溢出。 –
是否在調試器下運行它 - 這會告訴你它崩潰的位置 – pm100
@VishnuMurale是否是_full_代碼?你包括什麼標題? – DaV