2016-11-04 30 views
-2

我已經儘量減少我的代碼,以便重現此錯誤。我有我認爲是完美的if語句,但gcc堅持認爲這不是一個有效的陳述。如果語句看起來可以接受,但有錯誤:''''標記之前的預期表達式

#define SOMECHAR * 

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

int main(){ 
    char* my_string = (char*) malloc(sizeof(char[5])); 
    strcpy(my_string, "aa*a"); 
    int i; 

    for (i=0; i< sizeof(my_string); i++){ 
     if(strcmp(&my_string[i], SOMECHAR) == 0){ 
      printf("%s", "b"); 
     } else { 
      printf("%s", &my_string[i]); 
     } 
    } 
} 
+2

'的sizeof(my_string)'是一個指針 – Danh

+2

'的#define SOMECHAR *的大小'應該是'的#define SOMECHAR '*''' – Ari0nhh

+1

的#define SOMECHAR *'應該是'的#define SOMECHAR 「*」'反正比較邏輯應該是'my_string [i] =='*'' – Danh

回答

0

感謝您的意見和建議,我想出了我真正想要的。 第一個問題是#定義一個字符,它需要用單引號。 sizeof()完全用於描述指針的大小,而不是多長時間。我應該使用strlen()。菜鳥的錯誤。而我在這裏的主要方法沒有回報,所以一旦修復我已經有的錯誤,這將是一個問題。

但是有一個更好的方法來做我沒有循環和條件檢查所需要的東西。在string.h中有一個叫做strchr的函數,它會在匹配一個給定的字符之前返回一個指向字符串中最後一個字符的指針。我修改了我的代碼,如下所示:

#define SOMECHAR '*' 

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

int main(){ 
    char* line = (char*) malloc(sizeof(char[5])); 
    strcpy(line, "aa*a"); 
    int i; 
    char* ending; 

    printf("%s\n", line); 
    ending = strchr(line, SOMECHAR); 
    ending[0] = '\0'; 
    printf("%s\n", line); 

    return 0; 
} 

這會在匹配之前的字符處終止給定的字符串。這是我的任務要求。感謝你的幫助。

0

首先,size_of(my_string)是一個指針的大小,而不是陣列它指向的大小。

接下來,strcmp(&my_string[i], SOMECHAR)將擴大到strcmp(&my_string[i], *),您需要:

#define SOMECHAR "*" 

不過,我相信你想這個代替:

if(my_string[i] == '*'){ 
     putchar('b'); 
    } else { 
     putchar(my_string[i]); 
    } 

而作爲MM的評論說,你漏分配的內存

如果您確實需要定義該字符,只需執行以下操作:

#define SOMECHAR '*' 

/*some other code */ 

    if(my_string[i] == SOMECHAR){ 
     putchar('b'); 
    } else { 
     putchar(my_string[i]); 
    } 
+0

對於我正在做的任務,不幸的是我不得不爲角色使用一個定義。但這確實有幫助。你發現了一些我沒有意識到的錯誤。謝謝! – TurtleDynasty

+0

@TurtleDynasty如果您需要,增加了MACRO – Danh

+0

這很有幫助。謝謝。 – TurtleDynasty

相關問題