2014-08-28 40 views
0

我有一个程序在这里使用双字符指针无法从字符字符串**

#include <stdio.h> 
#include <stdlib.h> 

void loadarray(char ** message) 
{ 
    int size = 10; 
    *message = (char*)malloc(size * sizeof(char)); 
    int i = 0; 
    char stringarr[10]={"hello"}; 
    char msg_byte; 

    for (i = 0; i < size; i++) 
    { 
     //load stringarr into msg_byte 
     msg_byte = stringarr[i]; 
     char* pmsg  = *message; 
     *pmsg = (char)msg_byte; 
     printf("data location %d is %X\n", i, *pmsg); 
     pmsg++; 

    } 
} 


void main() 
{ 
    char* arr; 
    loadarray(&arr); 
    printf("array = %02X %02X %02X %02X %02X\n", arr[0], arr[1], arr[2], arr[3], arr[4]); 
} 

输出我是

data location 0 is 68 
data location 1 is 65 
data location 2 is 6C 
data location 3 is 6C 
data location 4 is 6F 
data location 5 is 0 
data location 6 is 0 
data location 7 is 0 
data location 8 is 0 
data location 9 is 0 
array = 00 00 00 00 00 

出于某种原因,我不能只是通过字符串回到主。我究竟做错了什么?首先感谢您的帮助。

+1

每日提醒不要投出malloc的返回类型。 – Igor 2014-08-28 17:10:52

+1

感谢您的提醒。我一直认为我必须。 – user3037484 2014-08-28 17:12:02

+3

每日提醒备份每日提醒与来源。 – 2014-08-28 17:12:53

回答

1
char* pmsg = *message; 

要初始化在每次迭代pmsg,因此它总是指向第一个字符时,for循环之前所说的那样。

1

那是因为你有:

char* pmsg  = *message; 
在循环

pmsg只能指向*message的第一个对象。

更改函数loadarray,以便pmsgfor循环之前被初始化。

void loadarray(char ** message) 
{ 
    int size = 10; 
    *message = malloc(size * sizeof(char)); 
    int i = 0; 
    char stringarr[10]={"hello"}; 
    char msg_byte; 

    char* pmsg  = *message; 
    for (i = 0; i < size; i++) 
    { 
     //load stringarr into msg_byte 
     msg_byte = stringarr[i]; 
     *pmsg = (char)msg_byte; 
     printf("data location %d is %X\n", i, *pmsg); 
     pmsg++; 

    } 
}