你没在最后添加结束符'\0',修改如下
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟空间、营销软件、网站建设、甘南网站维护、网站推广。
#include stdio.h
#include stdlib.h
int main()
{
char *p1,*p2,*p3;
char *p=(char*)malloc(1000000);
p1=p;
p2=p;
p3=p2;
gets(p1);
while (*p1!='\0')
{
if(*p1!=' ')
{
*p2=*p1;
p2++;
}
p1++;
}
*p2='\0'; //加上这一句,添加字符串结束符
puts(p3);
return 0;
}
————————————————————————-
这种输出又不是没用过,没问题的,可以把代码贴上来,我试试
————————————————————————————
输出时用p3啊,
puts(p3);
或用printf也可以
——————————————————————————
汗,你声明一个char *p3,处理前让p3=p2不就行了
#includestdio.h
int loc(int num,int a[],int length); /*改动过,加上参数*/
int main()
{
int a[]={1,2,3,4,5,6,7,8}; /*改动过,去掉最后面的逗号*/
int num;//num=number;
int ret;
scanf("%d",num); /*改动过,加上*/
ret=loc(num,a,sizeof(a)/sizeof(a[0]));
if (ret != -1){ /*改动过,loc改成了ret*/
printf("cunzai,%d",ret); /*改动过,loc改成了ret*/
} else {
printf("bucunzai");
}
}
smlloc?不知道哦
是malloc?
或者calloc?
下面两个倒是知道
函数malloc()和calloc()都可以用来动态分配
内存空间,但两者稍有区别。
malloc()函数有一个参数,即要分配的内存空间
的大小:
void *malloc(size_t size);
calloc()函数有两个参数,分别为元素的数目和
每个元素的大小,这两个参数的乘积就是要分配
的内存空间的大小。
void *calloc(size_t numElements,size_t
sizeOfElement);
如果调用成功,函数malloc()和函数calloc()都
将返回所分配的内存空间的首地址。
函数malloc()和函数calloc()的主要区别是前
者不能初始化所分配的内存空间,而后者能。如
果由malloc()函数分配的内存空间原来没有被
使用过,则其中的每一位可能都是0;反之,如果
这部分内存曾经被分配过,则其中可能遗留有各
种各样的数据。也就是说,使用malloc()函数
的程序开始时(内存空间还没有被重新分配)能
正常进行,但经过一段时间(内存空间还已经被
重新分配)可能会出现问题。
函数calloc()会将所分配的内存空间中的每一
位都初始化为零,也就是说,如果你是为字符类
型或整数类型的元素分配内存,那麽这些元素将
保证会被初始化为0;如果你是为指针类型的元
素分配内存,那麽这些元素通常会被初始化为空
指针;如果你为实型数据分配内存,则这些元素
会被初始化为浮点型的零。
这个程序的改动可大可小,如果不是通用算法,针对于你给的题目的改动(假设两个串长度固定且已经知道)
需要改动的地方,第二个函数,我把函数给出来
int strLoc (char str1[],char str2[])
{
int j;
int n=-1;
for(j=0;j14;j++)
if(str1[0]==str2[j]str[1]==str2[j+1])
{n=j; break;}
return (n);
}
如果要通用算法,就是不知道是什么字符串,也不知道长度,程序如下:
int strLoc (char str1[],str2[])
{
int i,j;
int n=-1;
for(j=0;jstrlen(str2);j++)
{for(i=0;istrlen(str1);i++)
if(str1[i]!=str2[i+j])
break;
if (i!=strlen(str1))
continue;
else
break;
}
if (j!=strlen(str2))
return(j);
else
return(n);
}
n=-1;
return (n);
}
主函数也给你把,看你的主函数也不太好
void main(int argc, char* argv[])
{
char str1[]={"do"};
char str2[]={"how do you do?"};
int n;
n=strLoc (str1,str2);
if (n!=-1)
printf("the same word begin at %d",n);
else
printf("%s中没有%s这个字符串",str1,str2);
}
假设数组各维的下界是不是1,二维数组A(mn)按“行优先顺序”存储在内存中,假设每个元素占用d个存储单元。元素a(ij)的存储地址应是数组的基地址加上排在a(ij)前面的元素所占用的单元数。因为a(ij)位于第i行、第j列,前面i-1行一共有(i-1)×n个元素,第i行上a(ij)前面又有j-1个元素,故它前面一共有(i-1) ×n+j-1个元素。
因此,a(ij)的地址计算函数为:LOC(aij)=LOC(a11)+[(i-1)*n+j-1]*d。
同样,三维数组A(ijk)按“行优先顺序”存储,其地址计算函数为:LOC(aijk)=LOC(a111)+[(i-1)*n*p+(j-1)*p+(k-1)]*d。
上述讨论均是假设数组各维的下界是1,更一般的二维数组是A[c1..d1,c2..d2],这里c1,c2不一定是1。a(ij)前一共有i-c1行,二维数组一共有d2-c2+1列,故这i-c1行共有(i-c1)*(d2-c2+1)个元素,第i行上a(ij)前一共有j-c2个元素。
因此,a(ij)的地址计算函数为:LOC(aij)=LOC(ac1c2)+[(i-c1)*(d2-c2+1)+j-c2)]*d。
例如,在C语言中,数组各维下标的下界是0,因此在C语言中,二维数组的地址计算公式为:LOC(aij)=LOC(a00)+(i*(d2+1)+j)*d。
您好,对于你的遇到的问题,我很高兴能为你提供帮助,我之前也遇到过哟,以下是我的个人看法,希望能帮助到你,若有错误,还望见谅!。展开全部
#includestdio.h
int main()
{
int max=0,min=0,aver=0;
int a[11];
int *p=a;//定义指针变量p,并指向数组a的首地址
for(;pa+10;p++)
scanf("%d",p);//利用指针偏移,向数组中输入10个整型数据
max=min=a[0];
for(p=a;pa+10;p++)
if(*pmax)
max=*p;//记录最大值
else if(*pmin)
min=*p;//记录最小值
for(p=a;pa+1;p++)
aver+=*p;//累加求和
aver/=10;//除以10求平均数 非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款