我想从终端使用参数运行一些代码。这里是我的代码:从命令行参数分割故障(核心转储)
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