在主函数把45 行换成 46或47 这样的代码就会报错,不清楚是为什么,请高手解答。谢谢。
/* 查询字符串中最长数字的长度及数字 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//查询字符串中最长数字的长度及数字
void findNum(char *str, char **ppos, int *length)
{
char *pstr = str;
char *ptemp;
int sum =0;
while (*pstr != "\0")
{ //假如不是数字就跳过
while ((*pstr <"0" || *pstr>"9") && *pstr != "\0")
{
pstr++;
}
//记录查询到的数字
if (*pstr >= "0" && *pstr <= "9")
{
//pos:开始处
ptemp = pstr;
int temp = 0;
while (*pstr >= "0" && *pstr <= "9")
{
pstr++;
temp++;
}
if (temp > sum)
{
sum = temp;
//printf("*ppos:%p\n", *ppos);
*ppos = memcpy(*ppos, ptemp, sum); //把查询到的内容拷贝到*ppos中
//printf("*ppos:%p\n", *ppos);
}
}
}
*length = sum; //记录最长字符的数值
}
void main()
{
char str[] = "abc12356abc09876543210abc789q";
char des[50] = "0"; //des:是常量不能修改指向。
//num:保存字查询到的最长字符串
char *num = des; // 假如换成 char *num = "0"; 或 char *num = "0"; 都不可以呢?
//char *num = "0"; 1:处
//char *num ; 2:处
int length ; //记录数字的长度
printf(" num:%p\n", num);
findNum(str, &num, &length);
printf("%s,%d\n", num, length);
/*char *p = "0";
char a[10] = "123";
p = a;
printf("%s\n", p);*/
system("pause");
}
解决方案
40
char *num=”0″ num指向的内容是常量,不能改
式子等同于 const char *p=”0″;
式子等同于 const char *p=”0″;