2014-11-22 50 views
0

我一直以爲我是一個聰明的人,直到我開始學習編程。這是東西一個小例子,不會編譯C中的指針樂趣爲什麼不能編譯?

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

int main() 
{ 
    char* dictionary; 
    dictionary = malloc(sizeof(char) * 3); 
    *dictionary = "ab"; 
    char c = dictionary[0]; 
    int i = 0; 
    while (c != "b") 
    { 
    printf("%c\n", c); 
    i++; 
    c = dictionary[i]; 
    } 
} 

error.c:8:15:錯誤:不相容指針整數的轉換從「字符[3]」 *字典分配給 「字符」 = 「AB」;

error.c:11:12:錯誤:對一個字符串比較的結果是 未指定(使用STRNCMP代替),而(C = 「B」!)​​

error.c:11:12:錯誤:指針和整數之間的比較 ('int'和'char *')while(c!=「b」)

+2

什麼編譯錯誤你好嗎?我唯一能注意到的是你沒有爲你的'main'函數返回 – 2014-11-22 01:56:21

+0

如果你聲明main返回'int',請在最後返回一個int ... – jpw 2014-11-22 01:57:02

+0

除了其他的東西,在' while'條件,因爲你正在比較一個'char'值,使用單引號,如:while(c!='b')'。雙引號創建一個字符串字面值,其值是一個指針,而不是您想要比較的值。 – 2014-11-22 01:59:16

回答

1

隨着單引號在while,你不能做* dictionary =「ab」。

當您取消引用char *(通過執行*字典)時,結果爲單個字符。你可以初始化一個char *來指向一個字符串。如果你在一行中做所有這將是:

char *dictionary = "ab"; 

否則,你應該做的:

#include <string.h> 

strcpy(dictionary, "ab"); 
+0

這是我缺乏的理解。我想通過做* dictionary =「ab」我去了我分配的內存並在那裏放了一串字符。 – SeanIvins 2014-11-22 02:17:53

1

您是代碼不正確。甚至沒有一點..有點讓我覺得這是一項家庭作業..但這裏有一些提示。

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

int main() 
{ 
    char* dictionary; 
    dictionary = malloc(sizeof(char) * 3); /* ok, I expect to see a free later */ 
    *dictionary = "ab"; /* assigning a string literal to a dereferenced char *.. 
         /* maybe we should use strncpy.. */ 
    char c = dictionary[0]; 
    int i = 0; 
    while (c != "b") /* hmm.. double quotes are string literals.. maybe you mean 'b' */ 
    { 
    printf("%c\n", c); 
    i++; 
    c = dictionary[i]; 
    } 
    /* hmm.. still no free, guess we don't need those 3 bytes. 
    int return type.. probably should return 0 */ 
} 
+0

你應該使用c註釋而不是C++。並非所有的c編譯器都可以處理// – Beirdo 2014-11-22 02:11:26

+0

扮演魔鬼的擁護者,並且在OP的防禦中:大多數OS內核開發者都對在退出時執行所有工作以釋放他們的東西的程序感到不滿。只需終止程序。如果你經歷了顯式釋放的麻煩,你只是迫使操作系統交換內存指向的所有頁面。 – datenwolf 2014-11-22 02:12:46

+1

@Beirdo:假設C99'//'是有效的,即使它不是C++ – datenwolf 2014-11-22 02:13:21

相關問題