- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 strtok 解析字符串,现在我的 IF 语句遇到了困难。怀疑我使用了错误的案例(值(value)与地址),但我已经没有想法了。任何帮助将不胜感激。
我使用一系列 printf 来确认 strtok 正确填充了“hldType”。再次感谢任何帮助。我已经坚持了好几天了。
缩写代码如下。还包括完整的代码源。
char *hldType; /* Parsing holding field */
static const char *REQTYPE = "0"; /* Comparison */
hldType = strtok(echoBuffer, "."); /* Parse the string */
if (strcmp(hldType,REQTYPE) == 0) /* NOT WORKING */
printf("REQTYPE myString: %s\n", REQTYPE);
代码:
#include <stdio.h> /* for printf() and fprintf() */
#include <sys/socket.h> /* for socket() and bind() */
#include <arpa/inet.h> /* for sockaddr_in and inet_ntoa() */
#include <stdlib.h> /* for atoi() and exit() */
#include <string.h> /* for memset() */
#include <unistd.h> /* for close() */
#include <time.h> /* Display time */
#define ECHOMAX 255 /* Longest string to echo */
void DieWithError(char *errorMessage); /* External error handling function */
/* User Defined type */
typedef struct _ServerMessage{
enum {New, Old, No_Message} messageType; /* same size as an unsigned int */
unsigned int SenderId; /* unique client identifier */
unsigned int RecipientId; /* unique client identifier */
char message[100]; /* text message */
} ServerMessage; /* an unsigned int is 32 bits = 4 bytes */
int main(int argc, char *argv[])
{
int sock; /* Socket */
struct sockaddr_in echoServAddr; /* Local address */
struct sockaddr_in echoClntAddr; /* Client address */
unsigned int cliAddrLen; /* Length of incoming message */
char echoBuffer[ECHOMAX]; /* Buffer for echo string */
unsigned short echoServPort; /* Server port */
int recvMsgSize; /* Size of received message */
char *hldType; /* Parsing holding field */
char *hldSend; /* Parsing holding field */
char *hldRecip; /* Parsing holding field */
char *hldMsg; /* Parsing holding field */
char tmpType[1]; /* Type of action requested by client, where 0 is Send and 1 is Received */
static const char *REQTYPE = "0";
/* Test Struct */
/*ServerMessage ServerMessage_new = {No_Message, 1234,5678,"Hello Server World - No Message"}; */
ServerMessage ServerMessage_new[100];
/* printf("Message Type: %d\n", ServerMessage_new.messageType);
printf("Message SenderID: %04d\n", ServerMessage_new.SenderId);
printf("Message RecipentID: %04d\n", ServerMessage_new.RecipientId);
printf("Message Content: %s\n", ServerMessage_new.message); */
if (argc != 2) /* Test for correct number of parameters */
{
fprintf(stderr,"Usage: %s <UDP SERVER PORT>\n", argv[0]);
exit(1);
}
echoServPort = atoi(argv[1]); /* First arg: local port */
/* Create socket for sending/receiving datagrams */
if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
DieWithError("socket() failed");
/* Construct local address structure */
memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */
echoServAddr.sin_family = AF_INET; /* Internet address family */
echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
echoServAddr.sin_port = htons(echoServPort); /* Local port */
/* Bind to the local address */
if (bind(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
DieWithError("bind() failed");
for (;;) /* Run forever */
{
/* Set the size of the in-out parameter */
cliAddrLen = sizeof(echoClntAddr);
/* Block until receive message from a client */
if ((recvMsgSize = recvfrom(sock, echoBuffer, ECHOMAX, 0,
(struct sockaddr *) &echoClntAddr, &cliAddrLen)) < 0)
DieWithError("recvfrom() failed");
printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr));
/* Parse string from client */
printf("echoBuffer Content: %s\n", echoBuffer);
hldType = strtok(echoBuffer, ".");
hldSend = strtok(NULL, ".");
hldRecip = strtok(NULL, ".");
hldMsg = strtok(NULL, ".");
printf("value of hldType: %s\n", hldType); /* Validated that it prints "0" */
/* Store message sent from client */
time_t now;
time(&now);
printf("%s", ctime(&now));
if (strcmp(hldType,REQTYPE) == 0) /* NOT WORKING */
printf("REQTYPE myString: %s\n", REQTYPE);
ServerMessage_new[0].messageType = atoi(hldType);
printf("hldType Content: %d\n", ServerMessage_new[0].messageType);
ServerMessage_new[0].SenderId = atoi(hldSend);
printf("hldSend Content: %04d\n", ServerMessage_new[0].SenderId);
ServerMessage_new[0].RecipientId = atoi(hldRecip);
printf("hldRecip Content: %04d\n", ServerMessage_new[0].RecipientId);
strncpy(ServerMessage_new[0].message, hldMsg, 40);
printf("hldMsg Content: %s\n", ServerMessage_new[0].message);
/* Send received datagram back to the client */
if (sendto(sock, echoBuffer, recvMsgSize, 0,
(struct sockaddr *) &echoClntAddr, sizeof(echoClntAddr)) != recvMsgSize)
DieWithError("sendto() sent a different number of bytes than expected");
}
/* NOT REACHED */
}
最佳答案
试试这个:
printf( "comparing [%s] to [%s]\n", hldType, REQTYPE);
if (strcmp(hldType,REQTYPE) == 0) /* NOT WORKING */
printf("REQTYPE myString: %s\n", REQTYPE);
您可能会在其中一个字符串中发现多余的空格。您还可以打印调用 strcmp()
的返回值。
如果 hldType
和 REQTYPE
都是 "0"
,那么 strcmp()
应该返回 0
(等于)。
关于c - If 语句中使用的字符串指针不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586336/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!