Can';t将常量char*分配给char*
我用C写,必须返回一个字符* 我试图复制strcpy函数。我有以下代码Can';t将常量char*分配给char*,c,pointers,C,Pointers,我用C写,必须返回一个字符* 我试图复制strcpy函数。我有以下代码 int main() { char tmp[100]; char* cpyString; const char* cPtr = &tmp[0]; printf("Enter word:"); fflush(stdin); scanf("%s", &tmp); cpyString = strcpy("Sample", cPtr); pr
int main()
{
char tmp[100];
char* cpyString;
const char* cPtr = &tmp[0];
printf("Enter word:");
fflush(stdin);
scanf("%s", &tmp);
cpyString = strcpy("Sample", cPtr);
printf("new count is %d\n", strlen(cpyString));
}
int strlen(char* s)
{
int count = 0;
while(*(s) != 0x00)
{
count++;
s = s+0x01;
}
return count;
}
char* strcpy(char* dest, const char* src)
{
char* retPtr = dest;
int i =0;
int srcLength = strlen(src);
for(i = 0; i< srcLength; i++)
{
*(dest) = *(src); //at this line program breaks
dest = dest + 0x01;
src = src + 0x01;
}
*(dest) = 0x00; //finish with terminating null byte
return retPtr;
}
intmain()
{
char-tmp[100];
char*cpyString;
常量字符*cPtr=&tmp[0];
printf(“输入单词:”);
fflush(stdin);
scanf(“%s”和tmp);
cpyString=strcpy(“样本”,cPtr);
printf(“新计数为%d\n”,strlen(cpyString));
}
整数strlen(字符*s)
{
整数计数=0;
而(*(s)!=0x00)
{
计数++;
s=s+0x01;
}
返回计数;
}
char*strcpy(char*dest,const char*src)
{
char*retPtr=dest;
int i=0;
int srcLength=strlen(src);
对于(i=0;i
问题1:我如何将src上的解引用值分配给目标,而不会导致程序崩溃
问题2:如果我需要将输入的
tmp
字符串复制到一个新字符串中,我将如何操作?我似乎无法将tmp
作为第二个参数传递您的程序正在崩溃,因为您无法修改指向常量的指针。请在下面查找更正的代码:
char *
mstrcpy (char *dest, const char *src)
{
char *retPtr = dest;
int i = 0;
int srcLength = strlen (src);
for (i = 0; i < srcLength; i++)
{
*(dest) = *(src); //now doesn't break at this line
dest = dest + 1;
src = src + 1;
}
*(dest) = 0x00; //finish with terminating null byte
return retPtr;
}
int
main ()
{
//char a = "abc"; // will cause crash
char a[] = "abc"; // won't crash
char *b = "xyz";
mstrcpy(a,b); //works fine !!!!
return 0;
}
char*
mstrcpy(char*dest,const char*src)
{
char*retPtr=dest;
int i=0;
int srcLength=strlen(src);
对于(i=0;i
请注意,在main函数中,如果使用char a=“abc”
,则会导致问题,因为它是指向常量的指针
cpyString = strcpy("Sample", cPtr);
^^^^^^^
const
您已经交换了参数。第一个参数是不允许写入的字符串文字(“示例”)。看
试一试
我不确定第二行是否正是你想要的,但至少它是合法的
也许你真的想要:
cpyStringBuffer[100];
cpyString = strcpy(cpyStringBuffer, cPtr);
一般来说,main
中的代码比需要的复杂
尝试:
我认为您使用了未初始化的目标和文本字符串指针。 您必须将目的地声明为缓冲区,如
char dest[const_size]
所以
char*strcpy(char*dest,const char*src)
{
char*retPtr=dest;
int i=0;
int srcLength=strlen(src);
对于(i=0;i
我想您可能希望编写如下代码
#include <stdio.h>
int strlen(char* s);
char* strcpy(char* dest, char* src);
int main()
{
char tmp[100];
char cpyString[100];
printf("Enter word:");
fflush(stdin);
scanf("%s", &tmp);
strcpy(cpyString, tmp);
printf("new count is %d\n", strlen(cpyString));
}
int strlen(char* s)
{
int count = 0;
while(*(s) != 0x00)
{
count++;
s = s+0x01;
}
return count;
}
char* strcpy(char* dest, char* src)
{
char* retPtr = dest;
int i =0;
int srcLength = strlen(src);
for(i = 0; i< srcLength; i++)
{
*(dest) = *(src); //at this line program breaks
dest = dest + 0x01;
src = src + 0x01;
}
*(dest) = 0x00; //finish with terminating null byte
return retPtr;
}
#包括
int strlen(字符*s);
char*strcpy(char*dest,char*src);
int main()
{
char-tmp[100];
char-cpyString[100];
printf(“输入单词:”);
fflush(stdin);
scanf(“%s”和tmp);
strcpy(cpyString,tmp);
printf(“新计数为%d\n”,strlen(cpyString));
}
整数strlen(字符*s)
{
整数计数=0;
而(*(s)!=0x00)
{
计数++;
s=s+0x01;
}
返回计数;
}
char*strcpy(char*dest,char*src)
{
char*retPtr=dest;
int i=0;
int srcLength=strlen(src);
对于(i=0;i
- 在我的示例中,我将cpyString声明为一个字符数组。这意味着变量将部分占用静态内存
- 您也可以通过调用malloc()或calloc()函数为其分配字节的动态内存
无法重现错误。请包含您的编译器并演示如何使用strcopy。我们需要查看调用
strcopy
函数的代码以及它为dest
参数指定的参数值。您不需要调用strlen
-您只需检查*src='\0'
并停止循环即可。请提供。我怀疑您的dest
可能是调用者中未初始化的指针。最后,“在这一行程序中断”不是一个有用的注释,请准确描述“中断”。编写strcpy
时无需调用strlen
。。。实际上,您降低了它的效率(您在源字符串上迭代了两次,但没有充分的理由)。一般来说,strcpy
的一个常见实现有三分之一的行(紧凑的是三行)。
char dest[const_size]
char* strcpy(char* dest, const char* src)
{
char* retPtr = dest;
int i =0;
int srcLength = strlen(src);
for(i = 0; i< srcLength; i++)
{
*(dest) = *(src); //at this line program breaks
dest = dest + 0x01;
src = src + 0x01;
}
*(dest) = 0x00; //finish with terminating null byte
return retPtr;
}
int main()
{
char *arr="xxxxxx";
char *dest="fffff"; // this won't work because you can not modify const string
char *dest_1; // this won't work because it is uninitialized pointer
char dest_2[50]; // this will work fine
strcpy(x, y);
printf("%s",x);
//x still the same as point pointer
return 0;
}
#include <stdio.h>
int strlen(char* s);
char* strcpy(char* dest, char* src);
int main()
{
char tmp[100];
char cpyString[100];
printf("Enter word:");
fflush(stdin);
scanf("%s", &tmp);
strcpy(cpyString, tmp);
printf("new count is %d\n", strlen(cpyString));
}
int strlen(char* s)
{
int count = 0;
while(*(s) != 0x00)
{
count++;
s = s+0x01;
}
return count;
}
char* strcpy(char* dest, char* src)
{
char* retPtr = dest;
int i =0;
int srcLength = strlen(src);
for(i = 0; i< srcLength; i++)
{
*(dest) = *(src); //at this line program breaks
dest = dest + 0x01;
src = src + 0x01;
}
*(dest) = 0x00; //finish with terminating null byte
return retPtr;
}