这是我的今天,指针给我做恶梦第二个问题。 我试图做一个程序,做同样的事情,的strcpy()函数来完成.. 一旦我尝试it..it崩溃,我100%肯定这是在我的代码指针的问题。我想是因为有某种的unintiallized指针(*复印)..但我已经指派NULL给它...所以任何人可以告诉我什么是空分配究竟呢?因为我相信我误解它的使用。并且请告诉我可以对程序进行修正什么正常运行。

 #include <iostream>
 using namespace std;

 void mycpy(char *b , char *a);

 int main()
 {

    char *original = "this is a text" ;
    char *copied = 0 ;

    mycpy(copied , original);

    for(int i = 0 ; *(copied+i) ;i++) cout << *(copied+i) ;

    return 0;
}

void mycpy(char *b , char *a){

    for(int i = 0 ; *(a+i) ; i++) *(b+i) = *(a+i);

}

预先感谢。

有帮助吗?

解决方案

好了,你的mycpy差不多吧(虽然你可能已经使用了括号,而不是算术,即a[i]而不是*(a+1))。为了正确打印复制串,最后一个字符必须是0,但最后一个是的的通过你的函数复制。因此,它应该而像

void mycpy(char *b , char *a)
{
    int i;
    for(i = 0 ; *(a+i) ; i++) *(b+i) = *(a+i);
    *(b+i) = 0; // or "\0", doesn't matter    
}

此外,变量

char *copied = 0 ;

没有指向有效的内存,所以你从内存位置0这是非法的阅读。你可以定义该变量作为阵列

char copied[20];

其他提示

您必须分配一些存储器的复制操作的结果。

在你的情况copied尚未初始化,所以你试图写一个空指针。下面将分配足够的内存,供您复制originalcopied

char* copied = new char[strlen(original)+1];

您有一个指针,但他们没有指向任何内存。您需要分配一些内存为这个工作。

char *original;

这仅仅是一个指针,指向一些存储器是字符类型。因为它只是一个指针不能设置为“这是一个文本”。它不具有任何的空间来存储“这是一个文本”。

char original[ 15 ] = "this is a text";
char copied[ 15 ] = "this is a text";

将工作,或者

char *original;
char * copied;

original = malloc( 15 );
copied = malloc( 15 );

mycpy( original, "this is a text" );
mycpy( copied, original );

这两种方法都抢到15个字节的存储您的文本。第一个例子使用从堆栈15个字节。第二个例子使用15个字节从所述堆。

修正:

 #include <iostream>
 using namespace std;

 void mycpy(char *b , char *a);

 int main()
 {

    char *original = "this is a text" ;
    char copied[30]; // you need to actualy allocate space 
    // (this is on stack, you could use new as well, for heap allocation)

    mycpy(copied , original);

    for(int i = 0 ; *(copied+i) ;i++) cout << *(copied+i) ;

    return 0;
}

void mycpy(char *b , char *a){
    int i =0;
    while (*(a+i)) {
        *(b+i) = *(a+i);
        ++i;
    }
    *(b+i) = '\0'; // null termination
}

在此行:

for(int i = 0 ; *(a+i) ; i++) *(b+i) = *(a+i);

b+i的导致该错误的解除引用。你解除引用0(NULL),它是数字1指针误差。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top