字符串中指针赋值问题

#include
#include
int main()
{//找出字符串中的空格,并将其删除
char* str = "in ter e st ing";
int i = 0;
while (*(str+i) != '\0')
{
if (*(str + i) == ' ')
{
int a = i;
while (*(str + a) != '\0')
{
*(str + a) = *(str + a + 1);??在这一行 调试老是显示中断...
a++;
}
}
i++;
}
printf("%s\n", str);
return 0;
}

在C/C++不能存在像这种赋值方式吗?

2个回答

因为你的字符串是存储在常量区的,是不可变的,所以会出错
你应该把字符串存储在栈空间上,比如用数字存储,就可以了,还有,要重新定义一个指针向后移动,不然在最后输出的时候只输出了‘\0’结果就会不正确

diannaoxiaobi
嵌入式-鱼 回复Cedric_zou: 用字符串储存数据,再把指针指向字符串
接近 2 年之前 回复
Cedric_zou
Cedric_zou 哦哦,我明白了。谢谢!int abc = strlen("in ter e st ing"); char* str = (char*)malloc(abc + 1); gets_s(str, abc + 1);
接近 2 年之前 回复
Cedric_zou
Cedric_zou 这个没必要用数据结构吧,栈空间不太熟练....
接近 2 年之前 回复

因为你的字符串是存储在常量区的,是不可变的,所以会出错
你应该把字符串存储在栈空间上,比如用数组存储,就可以了,还有,要重新定义一个指针向后移动,不然在最后输出的时候只输出了‘\0’结果就会不正确

越界了

试试
while (*(str + a) != '\0' && (a+1)<strlen(str))

Cedric_zou
Cedric_zou 不是越界的问题哦,试过了
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
字符串中指针赋值问题
#includen#includenint main()n//找出字符串中的空格,并将其删除 n char* str = "in ter e st ing";n int i = 0;n while (*(str+i) != '\0')n n if (*(str + i) == ' ')n n int a = i;n while (*(str + a) != '\0')n n *(str + a) = *(str + a + 1);??在这一行 调试老是显示中断...n a++;n n n i++;n n printf("%s\n", str);n return 0;nnn在C/C++不能存在像这种赋值方式吗?
指针赋值字符串问题
请问如果char* str = "abc";如果重新赋值如:str = "def";是不是会造成原来存储"abc"的内存不能用并且内存泄露?能不能用free(str)释放原来"abc"那块内存,然后赋值"def"?rn还是只能先声明一个char数组,然后修改字符串?
C语言指针字符串赋值
程序如下,为什么我输入三个字符串后,输入的n[i]都是第三个字符串? rn#include "stdio.h" rnmain() rn int i; rnchar *name,*n[4]; rnrnfor(i=1;i<=3;i++) rn rnscanf("%s",name); rnn[i]=name; rn rnfor(i=1;i<=3;i++) rn rnprintf("%s",n[i]); rn rnrn我的目的是想输入三个字符串给字符串数组n。 rnn[0]里面还有别的用处。 rn另外该公式是摘抄的程序段,所以请尽量不要更改程序的结构,谢谢!
关于指针赋值问题?
[code=C/C++]#include rnrnvoid main()rnrn int i = 3;rn int *pmax;rnrn *pmax = i; rnrn printf("%x\n", *pmax);rn printf("%d\n", *pmax); rn rn[/code]rnrn为什么这样不能通过呢
指针赋值问题
int *p;rn p = 1000; //这是错误的 不能把一个数赋给指针rn p = 0; rnrn如上,为什么p可以等于0呢
指针的赋值问题
一个类的数据成员 A*arn然后在类的成员函数中 用一个临时变量 A*b = a;rn然后当这个函数结束的时候 用不用去delete b呢,还是系统自己会执行这样的操作,然后这样的话a是不是也想当于被释放掉呢?
关于指针赋值的问题。
大家好。现在有以下代码:rn我想让a 的所有变量值等于b的所有变量值。rnPoint a(3,5)rnPoint b(4,6)rnsort(&a,&b)rnrnsort(*a,*b)rnrn Point *p1;rn p1 = b;rn a = p1;rn cout<
指针数据的赋值问题
请帮看下下面这个测试程序问题。。。rn#include "stdafx.h"rnrn#include rnrnvoid test(int **ycbcr)rnrn int *ptr_y;rn int *ptr_cb;rn int *ptr_cr; rn ptr_y = ycbcr[0];rn ptr_cb = ycbcr[1];rn ptr_cr = ycbcr[2];rnrn for(int i = 0; i<3; i++)rn rn *ptr_y = i;rn // ycbcr++;rn *ptr_cb = i +10;rn rn *ptr_cr= i +100;rn ptr_y++;rn ptr_cb++;rn ptr_cr++;rn rnrnrnvoid main()rnrn int i,j;rn int *y,*cb,*cr;rn y = (int*) malloc(100*sizeof(int));rn cb = (int*) malloc(100*sizeof(int));rn cr = (int*) malloc(100*sizeof(int));rn int *ycbcr[3] = y, cb, cr;rn test(ycbcr);rn for(i = 0; i<3; i++)rn rn printf("y=%d,cb=%d, cr=%d",*y, *cb, *cr);rnrn y++;rn cb++;rn cr++;rn rn
关于指针赋值的问题
这是我下面的代码。[code=C/C++]char* ctemp;rn rn if (NULL == dirname)rn rn //获取当前exe所在目录rn GetModuleFileName(NULL, ctemp, MAX_PATH);rn rn char* pchar;rn if(NULL == dirname)rn rn pchar = ctemp;rn rn pchar = dirname;rn 当通过GetModuleFileName函数获取到ctemp值后,给pchar赋值,pchar却没值,我rn 今天都快崩溃了。NND[/code]
指针的赋值问题?
TCHAR * pVarBlock, * pVarBeg, * pVarEnd, * pVarName ;rnpVarBlock = GetEnvironmentStrings ();rnrnpVarBloc是TCHAR *rnGetEnvironmentStrings ();返回的是LPVOIDrn两种类型不一样,为何不需要转换?
c++指针赋值问题.
#include rn//#include "Test.h"rnint main()rnrn int *alist = new int[15];rn int *newlist = new int[10];rn for (int i=0;i<15;i++)rn alist[i] = i;rn int *src = alist;rn int *ptr = newlist;rn for (int i=0;i<10;i++)rn rn *ptr++ = *src++;rn rn为什么这样赋值.ptr里的值一直是不对的?rn似乎没什么错,首先把第一位的值赋过去,在把指针++指向下一位.
指针间赋值的问题
比如C中可有如下代码,但如何在delphi下实现:rn....rnint *p, *pp;rn....rnp=malloc(...);rnpp=p+1;rn....rnpp[-1]=...;
给指针赋值问题
如下面的例子:rnint *p1;rnp1=0x00000000;rn这样有什么不对吗?rn如果要改应该怎么改?
关于赋值指针的问题!
这是我写的最近邻插值算法但是结果显示图像是全黑,可能是我的指针有问题,但是我是菜鸟,也不会改,那位大侠帮我看下?rn其中,m_Img和refimg是两个CxImage类对象,分别代表源图像和放大两倍后的图像rnrn m_Img.LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDC_pic1),rn "JPG"),CXIMAGE_FORMAT_JPG);rn LPBYTE p_data1;rn LPBYTE p_data2;rn p_data1 = m_Img.GetBits(0);rnrn long wide,newwide,height,newheight;rnrn wide = m_Img.GetWidth();rn height = m_Img.GetHeight();rnrn newwide = 2 * wide;rn newheight = 2 * height;rnrn refimg.Create(newwide,newheight,8,0);rn p_data2 = refimg.GetBits(0);rn rn long i,j; //新图像坐标rn long i0,j0; //源图像坐标rnrn rn LPBYTE lpSrc,lpDst;rnrn for (j=0;j= 0) && (i0 < wide) && (j0 >= 0) && (j0 < height))rn rn lpSrc=(LPBYTE)p_data1 + wide * j0 + i0; rn *lpDst=*lpSrc;rn rn rn
指针赋值的问题请教!
#include rnrnvoid main()rn char* str = "abc";rn char* temp = "def";rn *str=*temp;rn printf("====%s\n",str); rnrnrnrnrn就这段代码,编译没出错,但执行的时候出错.我想知道问题出在那.rn在我想像中,str的值最后应该是 "dbc" 才对的.rn为什么执行会报错呢?
指针、赋值问题。
CString strText( "Text" );rnCString* pstrText = &strText;rnrn*pstrText = strText + "Added";rn与rnpstrText = &( (*pstrText) + "Added" );rnrn为什么结果不同?
关于指针赋值问题
我在看书的时候遇到一条语句:int a[10],*p=a;rn调试没有错,但是我觉得应该:int a[10],*p;p=a;rn因为a是地址,我觉得应该把a赋值给p,而不是*prn
指针赋值的问题
[code=C/C++]rnlinux下rnrnvoid fun(int wReturnCode, char * lpDataOut, int *wDataOutLength)rn rn int offset =71;rn rn *wDataOutLength = offset;rnrnrnrn[color=#FF0000]*wDataOutLength = offset;rn 有问题嘛?[/color]rnvc 下没出问题啊。rn#include "stdio.h"rnrnvoid fun(int *wDataOutLength)rnrn int offset =5;rn *wDataOutLength = offset;rnrnvoid main()rnrn int i;rn fun(&i);rn printf("i=%d",i);rn rnrnrnrn[/code]
存储器问题、指针赋值
void *memset(void *s,int c,size_t count)rn char * xs=(char *)s;rn while(count--)rn * xs++=c;rn return s;rnrn是实现什么样的功能的?rn其中char * xs=(char *)s是将s的值还是地址给xs?rn * xs++=c中,c是int型的,xs是char型的,也能赋值?如果能,是将xs+1后给c赋值,还是xs=xs+1?rn谢谢解答!!
指针间的赋值问题
问题是这样的,我定义如下rn int a=2;rn int *p1=&a;rn int *p2=p1;rn现在我打出cout<
指针赋值的问题。求救!
unsigned char* file_buf; rn CFile fread(destfilename,CFile::modeRead); int file_bmp_len=fread.GetLength();rn file_buf=(unsigned char*)malloc(file_bmp_len+1024);rn fread.Read(file_buf,file_bmp_len);rn fread.Close(); rn BITMAPFILEHEADER* bmphead;rn BITMAPINFO* bmpinfo;rn bmphead=file_buf;//rn bmpinfo=file_buf+sizeof(BITMAPFILEHEADER);rn编译报如下错误:error C2440: '=' : cannot convert from 'unsigned char *' to 'struct tagBITMAPFILEHEADER *'rn Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style castrn问:该指针应当如何赋值啊?rnrn
指针的赋值问题。。。
已知:string *pstr = new string; string str = " .... ";rn请问,以下两种赋值方式有何区别啊?rn1> *pstr = str;rn2> pstr = &str;rn
二维数组与指针赋值问题
我想创建一个指向二维数组的指针,然后可以用指针对数组进行操作,编译可以通过,但是运行时有错误,不知应该如何修改代码达到目的?rn#include rnint main()rndouble ** a = new double *[2]; //定义2x2数组的指针rnfor(int i = 0 ; i < 2 ; i++)rn a [i] = new double [2];rnrndouble b[2][2]=0,; //2x2数组rna = (double **)b; rn**a = 12; //给b[0][0]赋值, 此句运行出错!rnprintf("%f",**a); rnreturn 0;rn
指针与数组赋值问题//................
[code=c]rntypedef struct STUrn TCHAR id[16];rnID_STU;rnTCHAR Info[100] = "10ghi";rnTCHAR converter_a[50];rnrnobj.id = wtos(Info,2,converter_a);rnerror C2440: “=” : 无法从“TCHAR *”转换为“TCHAR [6]”rn 没有转换为数组类型,但有转换为数组的引用或指针rnrnTCHAR* wtos(TCHAR* wc,int wlen,TCHAR* m_char)rnrn memcpy(m_char,wc,wlen* sizeof(TCHAR));rn m_char[wlen* sizeof(TCHAR)] = '\0';rn return m_char;rnrnrnrn[/code]
delphi指针赋值问题
在程序里 有指针a 结构如下 rna = ^brnb = recordrn c: Integer;rn d: a;rnend;rnrn在程序中有rnx: a;rny: b;rnrn但是当x:=y.d会出错 但是改为x:=@y.d就可以了,想问问有什么不同么。在c语言中应该前者是对的呀,delphi中有什么不同么?rn谢谢!
指针无法赋值的问题
char * strupper(char *psz)rn rn char * ps = psz;rn while (*ps != '\0')rn rn *ps = toupper(*ps);rn ps ++;rn rn return psz; rn rn我就是用了一个 upper的函数,然后传入的*ps = toupper(*ps);这句执行完后不能把纸赋给*ps,请问是啥原因?谢谢。rn调用的地方如下: rnchar * h="Af";rn char * as= strupper ( h);rn我怎么找都觉得没原因。。。rn
指针之间赋值问题
char *a=abc,*b;rnb=a;rn如果如何使得b所指的值不会跟着a的变化而变化,就是*b一直指向的地址值都是abcrn
关于指针的赋值问题
void copy_2th_to_sdram(void)    //目的是将2048到4096的内存 拷贝到0X30004000 上 {     unsigned int *pdwSrc  = (unsigned int *)2048;     unsigned int *pdwDest = (unsigned int *)0x30004000;   //pdwDest 是unsigned
有关指针赋值的问题
比如:rnchar *a;rnchar *s=new char[10];rnrns="123";rna=s;//这个时候a是"123"rns="234";//这个时候a还是"123"rnrn这样没有问题。rn但是如果变成rnrnchar *a;rnchar *s=new char[10];rnint i=100;rnitoa(i,s,sizeof(s));rna=s;//这个时候a是"100"rnitoa(i+1,s,sizeof(s));//这个时候a就变成"101"了 为什么呢?rndelete s;//这个时候a的值就没有了rnrn要如何才能把这个s的值储存起来?不被它后来改变所改变?rnrn实际操作中我是为了把一个函数传来的参数储存起来。rn这个函数的参数是 const char* 类型;rn我也弄一个 const char*数组来存这个参数rn可惜这个函数每被调用一次的时候,当其参数被改变,我数组中的所有元素都跟着改变了rnrn大概可能就是上面的问题吧
关于 指针赋值问题
不知道大家有没有遇到这种问题,rn比如 rnchar *s1=(char*)malloc(256),*s2=s1rn上述语句声明了两个指针s1和s2。但是由于某种需求,比如s1向下移动了10个字节,我想把s1的新值存到s2中,即指针赋值rn[color=#FF0000]s2=s1。[/color]rn我原本的意思是将s1的值(注意:是指针的值,而非指针所指向的值)保存到s2中。那么在s1变动过程中,s2是不会改变的。rn但是有时我却发现计算机的理解是:将s2赋值为s1的引用。即s2是s1的别名,如果s1移动,s2也会跟着移动。rnrn下面是程序1.注释区域的赋值最终导致了maxStartAddr成为subString的引用。rn[code=C/C++]rn#includern#includern#includernvoid function(char *s1,char *s2)rn rn char *subString=(char*)malloc(256); rn char *maxStartAddr=subString;rn int max=0;rn for(int i=0;ii;j--)rn rn subString[j-i]=0;rn if(strstr(s1,subString)!=NULL)rn rn if(j-i>max)rn rn max=j-i;rn maxStartAddr=subString;//赋值后,当继续循环 subString的地址变化时,maxStartAddr也开始变化了。显然maxStartAddr只是想把当时那个最大的地址给存储起来。rn rn rn rn rn *(maxStartAddr+max)=0;rn puts(maxStartAddr);rnrnvoid main()rnrn char *s1="aocdfeggg",*s2="pmcdfa";rn function(s1,s2);rnrn[/code]rnrnrn为了测试,本人写了程序2.如下。注释区域的赋值是存储了原来指针的值,而并没有变成其引用。rn[code=C/C++]rn#includern#includernvoid main()rnrn int maxValue=0;rn char *p=(char*)malloc(10);rn *p='1';rn *(p+1)='2';rn *(p+2)='5';rn *(p+3)='3';rn *(p+4)=0;rn char *p_maxValue=p;//initrn while(*p!=0)rn rn if(*p>maxValue)rn rn p_maxValue=p;//p_maxValue存储p的值,并没有变成其引用rn maxValue=*p;rn rn p++;rn rn putchar(*p_maxValue);rnrn[/code]rnrn[color=#FF0000]说了这么多不知道大家有没有听懂。如果我只想去赋值,而不想其成为引用该如何办,望不惜赐教。[/color]
指针赋值问题——————————求教
题目:给“the result of 3 and 2 is not 8"这字符串加密,加密方法就是给每个字符依次反复加上”4962873“中的数字。rn程序:rn#include rn#include rn#include rnrnvoid secret(char *);rnrnvoid main()rnrn char * str="the result of 3 and 2 is not 8";rn rn secret(str);rnrnrnvoid secret(char * p)rnrn int arr[7]=4,9,6,2,8,7,3;rn int i=0;rn int t;rn char c;rn while (*p!='\0')rn rn t=*p;rn c=(t+arr[i]);rn *p=c; // 出错在这里rn if(i=6)rn i=0;rn i++;rn p++;rn rn cout<<"加密后的情况:"rn <<" "<
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符