回覆列表
  • 1 # 滴逃逃

    *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"

  • 中秋節和大豐收的關聯?
  • 孕酮低,就必須補充黃體酮嗎?