*p = a;
這是什麼賦值方法?字串之間的賦值要用memcpy,memcpy(p,a,100);
如果只是單純的*p = a的話,p是char *型別,*p就是char型別,而a是一個int *型別,即一個地址,地址一般使用32位資料來儲存(64位機器使用64位資料儲存)。這麼賦值的話,*p並不是a的地址,而是a的地址中的一個8位元組。
然後使用printf("Memory Allocated at: %s",*p);,列印*p,*p不是a的地址,那肯定會崩潰的。
兩種寫法。使用memcpy賦值。
char n="a",*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
//*p=a;
memcpy(p,a,100);
if(p)
//printf("Memory Allocated at: %s",*p);
printf("Memory Allocated at: %s",p);
else
printf("Not Enough Memory!\n");
free(p);
system("pause..");
p寫成int *才可以。
*(int *)p=a;
printf("Memory Allocated at: %s",*(int *)p);
補充,這種寫法用C語言的編譯器還可以編譯透過。
如果使用C++的編譯器,是不會編譯透過的。
error C2440: "=" : cannot convert from "char [100]" to "char"
*p = a;
這是什麼賦值方法?字串之間的賦值要用memcpy,memcpy(p,a,100);
如果只是單純的*p = a的話,p是char *型別,*p就是char型別,而a是一個int *型別,即一個地址,地址一般使用32位資料來儲存(64位機器使用64位資料儲存)。這麼賦值的話,*p並不是a的地址,而是a的地址中的一個8位元組。
然後使用printf("Memory Allocated at: %s",*p);,列印*p,*p不是a的地址,那肯定會崩潰的。
兩種寫法。使用memcpy賦值。
char n="a",*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
//*p=a;
memcpy(p,a,100);
if(p)
//printf("Memory Allocated at: %s",*p);
printf("Memory Allocated at: %s",p);
else
printf("Not Enough Memory!\n");
free(p);
system("pause..");
p寫成int *才可以。
char n="a",*p=&n;
char a[100]="ajdskls";
p=(char *)malloc(100);
*(int *)p=a;
if(p)
printf("Memory Allocated at: %s",*(int *)p);
else
printf("Not Enough Memory!\n");
free(p);
system("pause..");
補充,這種寫法用C語言的編譯器還可以編譯透過。
如果使用C++的編譯器,是不會編譯透過的。
error C2440: "=" : cannot convert from "char [100]" to "char"