- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的程序中,我使用 inet_pton
函数的两种方式之一:
第一个:如果参数中没有指定默认 IP。
inet_pton(AF_INET, defaultIP, &servaddr.sin_addr)
第二:当给出命令行 IP 地址时。
inet_pton(AF_INET, argv[1], &servaddr.sin_addr)
问题是,第一个给我一个段错误,第二个没有。我觉得这与我传递默认 IP 的方式有关,但我不太明白。我这样定义 defaultIP:
const char *defaultIP = "127.0.0.1";
我尝试了多种传递 IP 地址的变体,但均未成功。也许这甚至不是问题?但是,如果我在命令行中传入 127.0.0.1,它可以正常通过 argv 传入。预先感谢您的任何回复!
根据要求,我正在使用的全部代码现在都在这里。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#define SA struct sockaddr
#define MAXLINE 4096
void err_sys(const char*);
int
main(int argc, char **argv)
{
const char *defaultIP = "127.0.0.1";
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
char defaultAddr = 0;
if (argc != 2)
defaultAddr = 1;
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13); /* daytime server */
if (defaultAddr = 1)
if (inet_pton(AF_INET, defaultIP, &servaddr.sin_addr) <= 0)
err_sys("inet_pton error for input IP address");
else
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_sys("inet_pton error for input IP address");
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
err_sys("connect error");
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
recvline[n] = 0; /* null terminate */
if (fputs(recvline, stdout) == EOF)
err_sys("fputs error");
}
if (n < 0)
err_sys("read error");
exit(0);
}
void err_sys(const char* x)
{
perror(x);
exit(1);
}
最佳答案
这里有两个错误:
if (defaultAddr = 1)
if (inet_pton(AF_INET, defaultIP, &servaddr.sin_addr) <= 0)
err_sys("inet_pton error for input IP address");
else
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_sys("inet_pton error for input IP address");
首先,您在想要==
的地方得到了=
。其次,您的 else
的代码缩进不正确,或者您忘记在必要的地方使用大括号:
if (defaultAddr == 1)
{
if (inet_pton(AF_INET, defaultIP, &servaddr.sin_addr) <= 0)
err_sys("inet_pton error for input IP address");
}
else
{
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_sys("inet_pton error for input IP address");
}
我不必非常努力地发现错误:
$ gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
> -Wold-style-definition -Werror inet_pton.c -o inet_pton
inet_pton.c: In function ‘main’:
inet_pton.c:32:5: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
if (defaultAddr = 1)
^
inet_pton.c:32:8: error: suggest explicit braces to avoid ambiguous ‘else’ [-Werror=parentheses]
if (defaultAddr = 1)
^
inet_pton.c:42:5: error: implicit declaration of function ‘read’ [-Werror=implicit-function-declaration]
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
^
cc1: all warnings being treated as errors
来自 Mac OS X 10.9.1 Mavericks 上的 GCC 4.8.2。
更正后,我得到了输出(无参数,因此使用默认 IP 地址):
connect error: Connection refused
我认为这是合理的 — 我的机器上没有运行 daytime
服务器。
关于c - inet_pton() 给出 "Segmentation fault",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21770508/
这是一个类作业,用于将有序插入到已排序的链表中。我已经避免访问空指针,并且添加了一些调试输出行以将段错误缩小到 while 循环本身的条件语句。 我可以将一个节点添加到空列表并将具有较小键的节点添加到
一个小型测试程序在 64 位 Linux 上使用 gfortran (4.4.5) 返回段错误。 n=2_8**22_8 时不存在故障。 gdb 指示在循环的第一次迭代期间函数 mylen 中发生段错
我正在使用 Spring-WS,当我通过 webServiceTemplate 中的 marshalSendAndReceive 调用 Web 服务时,我收到错误代码为 500 的 SOAP 错误。不
我有一个具有此方法的单例数据管理器: -(NSArray*)fetchItems { NSEntityDescription *entity = [NSEntityDescription
我有一个调用 Web 服务的 Java 应用程序 (A)。 1)然后我有另一个使用 A jar 的应用程序 (B)。调用成功,返回需要的数据。 2)然后我有一个也使用A jar 的网络应用程序。在这种
我正在 Java 应用程序中对第三方网络服务进行 SOAP 网络服务调用。用于查找 Web 服务、传输数据和发出 SOAP 请求的 Java 类是使用来自 WSDL 的 Apache CXF 库生成的
我正在尝试学习 SOAP 协议(protocol)。因此,在使用以下命令借助 wsimport 生成 net.webservicex 代码后 C:\Program Files\Java\jdk1.8.
我正在构建一个基于配备 arm64 CPU 的 UltraScale+ FPGA 的数据采集系统。数据通过 DMA 传输到 RAM。驱动程序中的 DMA 缓冲区保留如下: virt_buf[i] =
我使用 QtDesigner 创建了两个对话框“listdialog.ui”和“editdialog.ui”,已发布使用Qt5.3.1,然后添加到项目“phone book.pro”“带有源代码”使用
有谁知道空中交通管制系统是如何实现软件容错的? 一些 URL 会很有帮助。 最佳答案 Lockheed 不久前发表了一些关于此的文章。看看here . 许多系统都使用 Ada,它明确支持验证命题和其他
我认为阅读内存应该不会引起任何问题,例如 char *d=""; char *d2="test"; memcmp(d,d2,10); memcmp() 永远 会失败吗? 最佳答案 您的假设是不正确的,
这个程序在我的 UNIX 机器上导致了段错误。我将原因缩小到 memset() 的第二次调用。 为什么会出现这种行为?第一个“ block ”代码与第二个几乎相同,不是吗?为什么 第一次 调用 mem
我很困惑进程在使用虚拟内存时如何可能出现段错误。据我了解,“虚拟”内存允许进程访问所有可用内存,然后将其映射到“实际”硬件内存。通过这种转换,进程怎么可能尝试访问不允许访问的内存部分? 最佳答案 听起
Tritwise操作(向右旋转和疯狂操作)无法正确运行,并在Malbolge编译器/解释器中引发分段错误。 在看到有关Coding Challenges和Code Golf的惊人答案之后,我决定开始在
这是我的代码 #include #include #include /************************************************** a is a poin
我有下面的代码。当我取消注释 temperature(i,j) = anode_temperature 时,我会出现 SegFault。 forall(i=0:Cells(1), j=0:Cells(
我是 C 编程新手,我的代码中出现了段错误。该程序使用返回函数来询问用户他们的银行帐户中有多少钱。稍后我将添加代码来计算利息。感谢您为我查看此内容,因为我很难找出为什么会出现此错误。 #include
为了测试,我编写了一个代码来计算 #include int main(void) { int p, i, primes[50], index; boo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
考虑 const a = [1,2,3] console.log(a[5]) // returns undefined 我是一名 C 和 Fortran 程序员,我预计会发生段错误。这里的内存是如何管
我是一名优秀的程序员,十分优秀!