C/C++指针数组问题


#include "stdio.h"
#include "string.h"
#include "stdlib.h"

struct  web_node 
{
int authority ;            
char address[400] ;        
int if_die ;               
char create_time[16] ;    
int useful ;               
int enroll ;              
};


void main( void )  
{

    
web_node * total[6];
web_node target[6];
char a[5];
         char *p=a;

   
         //下面两行代码是小弟想把abc纯在total[0]里面的address中

         strcpy(&*(total[0]->address),"abc");
strcpy((total[0]->address),"abc");

         //此两行代码虽然编译过程中不报错,但程序在执行阶段会产生不发送的错误,望高手帮解决一下?
           帮小弟改一下




strcpy(p,"abc");
printf("%s\n",p);
printf("%0x\n",p);
strcpy(target[0].address,"abc");
         printf("%0x\n",&target[0]);
         printf("%0x\n",target[0]);
printf("%0x\n",target[0].address);
puts(target[0].address);

}

33 个解决方案

#1


你的先分配空间啊
你的total是个指针数组,里面存的是web_node *
total[0] = (web_node *)malloc(sizeof(web_node));
然后再调用strcpy

#2


可行代码如下,如果楼主想知道问题所在,请自行搜索“野指针”……

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <malloc.h>
struct  web_node 

    int authority ;            
    char address[400] ;        
    int if_die ;              
    char create_time[16] ;    
    int useful ;              
    int enroll ;              
}; 


int main( void )  


    int i;//mark;    
    struct web_node * total[6]; 
    struct web_node target[6]; 
    char a[5]; 
    char *p=a; 
    
    for(i=0;i<6;++i) 
        total[i] = (struct web_node *)malloc(sizeof(struct web_node));//mark; 
        //下面两行代码是小弟想把abc纯在total[0]里面的address中 
    
    //strcpy(&*(total[0]->address),"abc"); 
    strcpy((total[0]->address),"abc"); 

        //此两行代码虽然编译过程中不报错,但程序在执行阶段会产生不发送的错误,望高手帮解决一下? 
          //帮小弟改一下 


    strcpy(p,"abc"); 
    printf("%s\n",p); 
    printf("%0x\n",p); 
    strcpy(target[0].address,"abc"); 
    printf("%0x\n",&target[0]); 
    printf("%0x\n",target[0]); 
    printf("%0x\n",target[0].address); 
    puts(target[0].address); 
    system("pause");
    return 0; 

#3


total[0] 是用来放web_node *的

#4


total[0]->address
是指针,没有内存空间,想把“abc”,拷给total[0]->address指向的内存,需先给total[0]->address分配内存空间。

#5


请问高手total[0] = (web_node *)malloc(sizeof(web_node)); 
只为total[0]申请了空间,
能不能写一行代码

total[0]----到total[6]一块申请空间啊?而不用2楼的for循环实现呢??????

#6


想一句搞定又不用循环?
我可以肯定:不行╮(╯_╰)╭

#7


引用 5 楼 myselfdragon 的回复:
只为total[0]申请了空间,

这不是为total[0]申请空间

#8


引用 5 楼 myselfdragon 的回复:
请问高手total[0] = (web_node *)malloc(sizeof(web_node));
只为total[0]申请了空间,
能不能写一行代码

total[0]----到total[6]一块申请空间啊?而不用2楼的for循环实现呢??????

可以
你用total[0] = (web_node *)malloc(sizeof(web_node)*6);

#9


引用 5 楼 myselfdragon 的回复:
请问高手total[0] = (web_node *)malloc(sizeof(web_node));
只为total[0]申请了空间,
能不能写一行代码

total[0]----到total[6]一块申请空间啊?而不用2楼的for循环实现呢??????

不允许用for循环么?

#10


引用 5 楼 myselfdragon 的回复:
total[0]----到total[ 6]一块申请空间啊?而不用2楼的for循环实现呢??????

哪来的6

#11


回楼上的,请勿误人子弟……
像您那样用,total[1]仍然是野指针╮(╯_╰)╭ 

#12


被插楼了……
11楼针对的是8楼的说法
引用 8 楼 lijian22500 的回复:
引用 5 楼 myselfdragon 的回复:
请问高手total[0] = (web_node *)malloc(sizeof(web_node));
只为total[0]申请了空间,
能不能写一行代码

total[0]----到total[6]一块申请空间啊?而不用2楼的for循环实现呢??????


可以
你用total[0] = (web_node *)malloc(sizeof(web_node)*6);

请勿误人子弟…… 
像您那样用,total[1]仍然是野指针╮(╯_╰)╭ 

#13


引用 11 楼 mstlq 的回复:
回楼上的,请勿误人子弟……
像您那样用,total[1]仍然是野指针╮(╯_╰)╭

me?

#14


被插楼了,囧

#15


引用 12 楼 mstlq 的回复:
被插楼了……
11楼针对的是8楼的说法
引用 8 楼 lijian22500 的回复:
引用 5 楼 myselfdragon 的回复:
请问高手total[0] = (web_node *)malloc(sizeof(web_node));
只为total[0]申请了空间,
能不能写一行代码

total[0]----到total[6]一块申请空间啊?而不用2楼的for循环实现呢??????


可以
你用total[0] = (web_node *)malloc(sizeof(web_node)*6);


请勿误人子弟……
像您那样用,total[1]仍然是野指针╮(╯_╰)╭

补救一下也就是的了
total[1]=total[0]+1

#16


我错了,按我这样,total就得这么声明了。web_node * total;
要是按照web_node * total[6];  totle[2]就真成野指针了。
不过可以给给它们赋值
 total[1] = total[0] + 1;
total[2] = total[0] + 2;
.
.
.

#17


8楼的老兄,这个好像不行,
我这#include "stdafx.h"


#include "stdio.h"
#include "string.h"
#include "stdlib.h"

struct  web_node 
{
int authority ;            
char address[400] ;        
int if_die ;               
char create_time[16] ;    
int useful ;               
int enroll ;              
};


void main( void )  
{

    
web_node * total[6];
web_node target[6];
char a[5];
        char *p=a;

    total[0] = (web_node *)malloc(sizeof(web_node)*6); 
       // total[0] = (web_node *)malloc(sizeof(web_node)); 
        strcpy(&*(total[0]->address),"abc");
    
//strcpy((total[0]->address),"abc");
        strcpy(total[1]->address,"cdd");
strcpy(p,"abc");
printf("%s\n",p);
printf("%0x\n",p);
strcpy(target[0].address,"abc");
        printf("%0x\n",&target[0]);
        printf("%0x\n",target[0]);
printf("%0x\n",target[0].address);
puts(target[0].address);
    

puts(total[0]->address);
printf("%0x",total[0]->address);
puts(total[1]->address);
}


样写的运行时还是不发送?请楼上各位高手在想想办法,能不能解决?

#18


呵呵,补救的方法当然可行^_^
可问题是楼主想要 1句搞定,哪有那么好的事情啊╮(╯_╰)╭?

#19


for循环也就O(n)复杂度,楼主为啥不用?

#20


回复楼主,strcpy(total[1]->address,"cdd"); 
这句,total[1]指向的内存 不确定


#21


引用 19 楼 cyldf 的回复:
for循环也就O(n)复杂度,楼主为啥不用?


人人都有洁癖的自由^_^

#22


void main( void )  


    
web_node * total[6]; 
web_node target[6]; 
char a[5]; 
char *p=a; 

total[0] = (web_node *)malloc(sizeof(web_node)*6);
total[1] = total[0] + 1;
total[2] = total[0] + 2;
total[3] = total[0] + 3;
total[4] = total[0] + 4;
total[5] = total[0] + 5;

// total[0] = (web_node *)malloc(sizeof(web_node)); 
strcpy(total[0]->address,"abc"); 
    
//strcpy((total[0]->address),"abc"); 
strcpy(total[1]->address,"cdd"); 
strcpy(p,"abc"); 
printf("%s\n",p); 
printf("%0x\n",p); 
strcpy(target[0].address,"abc"); 
printf("%0x\n",&target[0]); 
printf("%0x\n",target[0]); 
printf("%0x\n",target[0].address); 
puts(target[0].address); 
    

puts(total[0]->address); 
printf("%0x",total[0]->address); 
puts(total[1]->address); 

是这个结果吗:

abc
13f540
13f548
cccccccc
13f54c
abc
abc
321accdd
Press any key to contin

#23


有些printf 没有什么意义!

#24


 还有一事老弟要问一下???

#25


#include "stdio.h"
#include "math.h"
#include "string.h"
#include "stdlib.h"

struct  web_node 
{
int authority ;            // 在某一搜索引擎中的排名( 权值 )
char address[400] ;        // 网页地址
int if_die ;               // 是否“死链”
char create_time[16] ;     // 创建时间
int useful ;               // 是否“有效”,相关
int enroll ;               // 是否注册
};



void GetData( web_node *&value, FILE *fp ) ;                      // 加载“数据”
void main( void )  
{

          char *fileName[6] = { "谷歌.txt", "百度.txt", "雅虎.txt", "soso.txt", "搜    狗.txt", "bing.txt" } ;
          web_node *target[6] ;
          //int totalRelative[6] = { 0 } ;
    
           //strcpy(target[0]->address,(char *)&totalRelative[6]);

    for(int j = 0; j < 6; j++)
{
FILE *fp1 = fopen( fileName[j], "r" ) ;
target[j] =  new web_node[50] ;
GetData( target[j], fp1 ) ;
//puts(*&target[j]);
printf("%0x\n",*&target[j]);
printf("%c\n",*&target[j]);

             // printf("###########   %s\n\n\n", fileName[j]) ;
}

       
    

}




void GetData( web_node *&value, FILE *fp ) 
{
int i = 0 ;
int lineNum = 1 ;
char line[512] = "" ;
    char *p = line ;
    char *p_add[6] ;
    p_add[0] = line ;

end:
while(( fgets( line, 512, fp ) && !feof(fp)) )
{
if( *p == ' ' )
{
goto end ;
}
for( ; *p != '\n'; p++)
{

if( *p == ',' )
{
if( *(p - 1) == ' ')
{
*(p - 1) = '\0' ;
}

if( *(p + 1) != ' ' )
{
p_add[++i] = (p + 1) ;
}
else // ( p + 1 )为空格的情况
{
p_add[++i] = (p + 2) ;
}
*p = '\0' ;
}
}
     // printf("%d\n", lineNum) ;
        *p = '\0' ;
 
value[lineNum - 1].authority = atoi(p_add[0]) ;
strcpy(value[lineNum - 1].address, p_add[1]) ;  
value[lineNum - 1].if_die = atoi(p_add[2]) ;                        // 如果,一个字符串中的字符含有非 '1-9' ,那么 atoi 会将其按 0 处理  
// printf("%d------%d \n", lineNum, value[lineNum - 1].if_die) ;
strcpy(value[lineNum - 1].create_time, p_add[3]) ;
value[lineNum - 1].useful = atoi(p_add[4]) ;
value[lineNum - 1].enroll = atoi(p_add[5]) ;
        lineNum++ ;
memset(line, 0, 512) ;
p_add[0] = line ;
p = line ;
i = 0 ;
}
}

#26


不知道你想表达 什么

#27


此程序中target[0]的地址为0x000351f0
      而&target[0]为0x001355f0
为什么*&target[0]的值不是0x000351f0,而是别的52‘?类似的东西呢

#28


高手解释下好吗?

#29


不是52‘?而是  -16'?

#30


printf("%0x\n",*&target[j]); 
printf("%c\n",*&target[j]); 

不要又加*又加&的,要有%c是显示一个字节。%0x显示4个字节。
比如:

int i = 0x41424544;
printf("%0x\n",i);
printf("%c",i);

结果是
0x41424344
D

#31


但是我 printf("%0x\n",*&target[j]);的结果是(0x000)351c0而不是(0X000)351f0
请问为什么呢???

#32


学习

#33


指针悬空,“野指针”
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告