c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的困惑)

c语言中的单引号和双引号可是有很大区别的,使用之前一定要了解他们之间到底有什么不同,下面小编就给大家详细的介绍一下吧,对此还不是很了解的朋友可以过来参考下
 

问题:
从c++文件中将std:string转换为char*后,返回包含IP地址的char*,需要将该字符串char*中的IP地址提取出来;

解决办法:
1. 解决思路:
IP地址最长为12字符+3句点=15字符,一般性表示为192.168.111.111;
可以从第一个字符开始解析,当不是'.'时,将所有字符保存下来,然后把所有保存下来的字符转换为16进制就可以了;

2. 程序如下:

复制代码 代码如下:

typedef struct {
    char addr_ipv4[4];
} IPADDR_IPV4;
#include <stdlib.h>
// Function: To extract HEX value of IP address from string expression.
IPADDR_IPV4 parse_IPString(const char *str, u8 strlen) {
 IPADDR_IPV4 ipv4;
 char tmpBuf[4] = {0};
 u8 k;
 u8 inx = 0;
 u8 j = 0;
 // Dprintf("The ch_ip is:%sn", ch_ip);
 for (k=0; k<strlen; k++) {
  if (str[k] != '.') {
   // Dprintf("k-inx: %dn", k-inx);
   memcpy(&tmpBuf[k-inx], &str[k], 1);
  }
  else {
   inx = k + 1;
   // Dprintf("inx: %d, tmpBuf: %sn", inx, tmpBuf);
   ipv4.addr_ipv4[j++] = strtol(tmpBuf, NULL, 10);
   memset(tmpBuf, 0, sizeof(tmpBuf));
   continue;
  }
  // Dprintf("tmpBuf: %sn", tmpBuf);
  ipv4.addr_ipv4[j] = strtol(tmpBuf, NULL, 10);
 }
 // Dprintf("ipv4 is: ");
 // for (k=0; k<sizeof(ipv4.addr_ipv4); k++) {
 //  Dprintf("%d", ipv4.addr_ipv4[k]);
 // }
 // Dprintf("n");
 return ipv4;
}

应用如下:

复制代码 代码如下:

   char* ch_ip = NULL;
    IPADDR_IPV4 ipv4Addr;
    ch_ip = (char*)malloc(16);
    memset(ch_ip, 0, 16);

    // parse IP address
    ch_ip = getIPAddr();

    // convert IP address from string to HEX expression
    ipv4Addr = parse_IPString(ch_ip, strlen(ch_ip));

3. 注意事项:
原来进行字符比较的时候,用的是if (str[k] != ".")而不是if (str[k] != '.'),结果一直不对。
后来反复 查找原因,才知道单引号''和双引号“”的区别:

(1)。含义不同。
单引号引起的一个字符代表一个整数,整数值对应于该字符在ASCII字符集中的序列值;
双引号引起的都是字符串,哪怕只有一个字符也是字符串,双引号引起的一个字符代表一个指向无名数组起始字符的指针;
比如:'.'代表十进制46,十六进制0x2E;
而"."代表指向起始字符为"."的某数组的指针;

(2)。大小不同。
单引号引起的一个字符大小就是一个字节;
双引号引起的一个字符大小是两个字节,因为双引号引起的字符串会在字符串的末尾添加一个0x00作为字符串的结束标识。

在本人的程序中正确取到了IP地址。
问题解决。

时间: 2024-10-25 16:13:01

c语言中单引号和双引号的区别(顺利解决从字符串中提取IP地址的困惑)的相关文章

php中单引号和双引号的区别

如果字符串包含在双引号中,php将对字符串中的一些特殊字符进行解析. 例1: <?php $i=80; $a="hello$i"; $b='hello$i'; echo '<br />$a='.$a; //输出$a=hello80,双引号输出变量的值 echo '<br />$b='.$b; //输出$b=hello$i,单引号输出变量的名称 ?> 例2: <?php $a="hello\""; $b='hello

php中单引号与双引号的区别

php教程中单引号与双引号的区别 引号中,任何变量($var).特殊转义字符(如"t r n"等)不会被解析,因此php的解析速度更快,转义字符仅仅支持"'"和""这样对单引号和反斜杠本身的转义: 在字串中使用变量 这个功能让你无须使用连接符号来粘和大量的简单字符串.php允许我们在双引号串中直接包含字 串变量,我们可以发现下面的两个字串的处理结果是相同的. $full_name = $first_name . ' ' . $last_name;

PHP中单引号与双引号的区别分析_php技巧

①转义的字符不同 单引号和双引号中都可以使用转义字符(\),但只能转义在单引号中引起来的单引号和转义转义符本身.如果用双引号("")括起字符串,PHP懂得更多特殊字符串的转义序列. <?php $str1 = '\',\\,\r\n\t\v\$\"'; echo $str1,'<br />'; $str2 = "\",\\,a\r\n\tb\v\$\'"; echo $str2,'<br />'; ?> ②对变

Shell脚本中单引号(‘)和双引号(“)的使用区别_linux shell

在Linux操作系统上编写Shell脚本时候,我们是在变量的前面使用$符号来获取该变量的值,通常在脚本中使用"$param"这种带双引号的格式,但也有出现使用'$param'这种带引号的使用的场景,首先大家看一段例子: 复制代码 代码如下: [root@linux ~]# name=TekTea [root@linux ~]# echo $name TekTea [root@linux ~]# sayhello="Hello $name" [root@linux ~

Unix Shell中单引号、双引号字符、反斜杠、反引号的使用[转]

在执行shell脚本的时候,shell将会对脚本中的行进行解释,然后执行:对于一些特殊处理的句子,我们可以使用引号或者反斜线来避免shell解释执行之.如下,当在命令行中输入:echo *child.sh env_variable father.sh param.sh profile.sh 125017.sh默认会将当前文件夹下的所有文件都打印出来,但我们需要的是输出一个"*".可以以这样的方式让shell不去解释星号(*):echo "*"* 下面是shell引用

浅谈PHP中单引号和双引号到底有啥区别呢?_php技巧

在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" ". 但是必须使用同一种单或双引号来定义字符串,如:'Hello World"和"Hello World'为非法的字符串定义. 单引号和双引号到底有啥区别呢? PHP允许我们在双引号串中直接包含字串变量. 而单引号串中的内容总被认为是普通字符,因此单引号中的内容不会被转义效率更高. 比如: 复制代码 代码如下: $str='hello'; echo "str is $str"

php中单引号和双引号的区别及用法介绍

在PHP中,通常一个字符串被定义在一对引号中 按照下面的方法操作:  代码如下 复制代码 $out = str_replace(array('rn', 'r', 'n'), '', $out);PHP 提供三种定义字符串的方法:单引号.双引号.本地文档(英文叫做 here document 或者 heredoc). 单引号: 使用单引号是最高效的方法,因为 PHP 不会检查单引号字符串中的内置变量和转义序列,需要转义的字符只有反斜杠和单引号本身. 双引号: 会检查内置变量和转义序列,但不能识别转

js中单引号与双引号冲突

 如何解决js中单引与双引冲突,想下面的这段代码: 代码如下 html += ' <a onclick="return removeOpenCss('+e.point.lng+e.point.lat+')">取消</a>';   这是js中的代码,如果这里这样写的话,会提示js错误,是因为removeOpenCss方法里的参数没有单引或者双引,如果这里,这样写的话: 代码如下 html += ' <a onclick="return remove

PHP中单引号与双引号实例用法

  ""双引号里面的字段会经过编译器解释,然后再当作HTML代码输出. '' 单引号里面的不进行解释,直接输出. 单引号和双引号都有自己的用途. 单引号的内容不会被解析,效率更高. 如下面代码: $url='http://www.veryhuo.com'; //单引号输出 $output= '$url'; echo '单引号输出:'.$output.' '; //双引号输出 $output="$url"; echo "双引号输出:".$outpu