.编写一子函数,进行字符串解析 /* Internet address. */ struct in_addr { uint32_t s_addr; /* address in network byte order */ }; char *inet_ntoa(struct in_addr in); #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <arpa/inet.h> int main(int argc,const char * argv[]) { //argv[1]---"192.168.2.68" //argv[2]---"8888" struct sockaddr_in client;//通过网络获得客户端的地址 printf("客户端的IP地址:%S",inet_ntoa(client.sin_addr)); printf("端口号:%d\n",ntohs(client.sin_port)); return 0; } "zhangsan#123456#" "zhangsan" "123456" 参数:3个 参数1:你要解析的字符串 const char * 参数2:解析会获得用户名字符串char * 参数3:解析会获得密码字符串 char * 返回值:成功返回1,失败返回0 int parseStr(const char * str,char * username,char * pwd); int main(void) { char str[100]="zhangsan#123456#"; char username[20]; char pwd[20]; parseStr(str,username,pwd); printf("username=%s\npwd=%d\n",username,pwd); }
时间: 2024-02-21 09:00:33 浏览: 123
可以参考下面的代码实现:
```
#include <stdio.h>
#include <string.h>
int parseStr(const char *str, char *username, char *pwd) {
// 检查参数是否为空
if (str == NULL || username == NULL || pwd == NULL) {
return 0;
}
// 查找分隔符#
const char *p = strchr(str, '#');
if (p == NULL) {
return 0;
}
// 复制用户名字符串
int len = p - str;
strncpy(username, str, len);
username[len] = '\0';
// 复制密码字符串
strcpy(pwd, p+1);
// 返回成功
return 1;
}
int main(void) {
char str[100] = "zhangsan#123456#";
char username[20];
char pwd[20];
int ret = parseStr(str, username, pwd);
if (ret) {
printf("username=%s\npwd=%s\n", username, pwd);
} else {
printf("解析失败\n");
}
return 0;
}
```
解析函数 `parseStr` 接收一个字符串 `str`,以及两个指针 `username` 和 `pwd`,分别用于存储解析出来的用户名和密码字符串。函数首先检查参数是否为空,如果为空就返回 0 表示解析失败。然后函数查找分隔符 `#`,如果不存在就返回 0 表示解析失败。如果分隔符存在,就复制用户名字符串到 `username` 中,复制密码字符串到 `pwd` 中,并在最后返回 1 表示解析成功。
在主函数中,我们定义了一个字符串 `str`,包含了用户名和密码以及分隔符 `#`。然后我们调用 `parseStr` 函数进行解析,如果解析成功,就打印出用户名和密码。注意,这里的 `printf` 函数中,`pwd` 应该使用 `%s` 格式化字符串,而不是 `%d`。
阅读全文