gpt4 book ai didi

c - 来自命令行参数的段错误(核心转储)

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:31 25 4
gpt4 key购买 nike

我正在尝试使用参数从终端运行一些代码。这是我的代码:

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 运行它之后,它说“程序接收到信号 SIGBUS,总线错误。0x0000000100000ccf in main ()”虽然不太确定这是什么。

最佳答案

这失败了,因为你正在声明大小为 0 的数据

int BYTES_TO_SEND = 0;
...
char data[BYTES_TO_SEND];
'''
LocalAddresss = concat("192.168.1.",argv[1]);
PORT_NUM = atoi(argv[2]);
BYTES_TO_SEND = atoi(argv[3]);

你需要移动线条

int BYTES_TO_SEND = 0;
...
LocalAddresss = concat("192.168.1.",argv[1]);
PORT_NUM = atoi(argv[2]);
BYTES_TO_SEND = atoi(argv[3]);
char data[BYTES_TO_SEND];
'''

但这是一个糟糕的计划 - 将像这样的大缓冲区放在堆栈上,最好对其进行 malloc。你的例子会起作用,但它不是一个好的设计

关于c - 来自命令行参数的段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38381839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com