在我们讨论之前先看一个函数:
```
#include
#include
#include
int parse_cmd_num(int count,int *dest)
{
int j = 0;
char *p = NULL;
char *q = NULL;
char sbuf[20] = ": 12,23,34";
p = sbuf;
p++;
while(count--)
{
p++;
*(dest+j)=atoi(p);
q = strstr(p,',');
sprintf("parse_cmd_num p = %s",p);
p = q;
j++;
}
return 1;
}
int main()
{
int i = 0;
int array[3]={0};
parse_cmd_num(3,array);
for(i=0;i<3;i++){
printf("array %d:%d
",i,array[i]);
}
return 0;
}
```
**这个函数的作用是取字符串中的数字。程序逻辑看起来没有什么问题,但是奇怪的是 `sprintf("parse_cmd_num p = %s",p);`这个没有执行。说明程序有错误的,但是错在哪里尼?**
看下单,双引号的定义:
单引号'' 引起的一个字符代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。
双引号"" 引起的字符串代表的是一个指向无名数组起始字符的指针。
当strstr即使要匹配字符也要用双引号表示,否则会当作整数处理。这样程序就会发生错误。C语言中数据的类型还是特别重要的。将程序中的q = strstr(p,',');
改为q = strstr(p,",");
就能正常运行了。