簡體   English   中英

我如何修復 C 中的“']' 之前的預期表達式”錯誤消息?

[英]How can i fix this " expected expression before ']' " error message in C?

我的代碼:

#include<stdio.h>
#include<string.h>
void main()
{
    char s1[]="Avishek",s2[]="Chowdhury";
    puts(s1);
    puts(s2);
    strcat(s1,s2);
    puts(s1);
    s1[]="Avishek",s2[]="Chowdhury";
    strcpy(s1,s2);
    puts(s1);
}

當我嘗試運行此代碼時,我的代碼塊編輯器顯示此錯誤消息...

錯誤:']' 之前的預期表達式

誰能建議我如何解決這個問題......

您不能使用=運算符在初始化之外分配數組內容。

char s1[] = "Avishek";  // this is an initialization, not an assignment - there is a difference

s1聲明為 8 個字符的char數組,並將字符串文字"Avishek ”的內容復制到它。 數組的大小由初始化器的大小決定。 在這種情況下, "Avishek"需要 8 個字符(7 個用於打印字符,1 個用於字符串終止符)。

s1[] = "Avishek"; // this is an assignment

失敗是因為您不能在聲明之外的數組上使用空[]運算符 - 編譯器認為您正在嘗試訪問數組的特定元素,但您缺少[]運算符之間的索引值(因此出現“']'之前的預期表達式”錯誤消息)。

然而,

s1 = "Avishek";

也不起作用 - 您不能使用=運算符分配數組表達式。 要重置s1以包含字符串"Avishek" ,您必須改用strcpy庫 function:

strcpy( s1, "Avishek" );

所以你的代碼會讀

strcat(s1,s2);
puts(s1);
strcpy(s1, "Avishek");
strcpy(s2, "Chowdhury");
strcpy(s1,s2);

除非你有其他幾個問題。 Arrays in C 不會自動增長或收縮。 如果你想在行中將s2連接到s1

strcat(s1,s2);

那么s1需要被聲明為足夠大以存儲結果字符串,在這種情況下它不是。 您只聲明s1足夠大以存儲"Avishek" 為避免緩沖區溢出,您必須在聲明中指定s1的大小:

char s1[18] = "Avishek"; // large enough to store "AvishekChowdhury"
char s2[] = "Chowdhury";

最后一個變化是main返回int ,而不是void 所以你的改變需要

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

int main(void)
{
    char s1[18]="Avishek";
    char s2[]="Chowdhury";

    puts(s1);
    puts(s2);
    strcat(s1,s2);
    puts(s1);
    strcpy(s1, "Avishek");
    strcpy(s2, "Chowdhury");
    strcpy(s1,s2);
    puts(s1);

    return EXIT_SUCCESS;
}

如果您嘗試測試不同的情況,那么此解決方案將使您的代碼編譯通過:

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

int main()
{
    {
        char s1[]="Avishek",s2[]="Chowdhury";
        puts(s1);
        puts(s2);
        strcat(s1,s2);
        puts(s1);
    }
    {
        char s1[]="Avishek",s2[]="Chowdhury";
        strcpy(s1,s2);
        puts(s1);
    }
}

請注意,您沒有重新分配 arrays 而是重新創建它們,並且第一個塊中的s1s2與第二個塊中的s1s2不同。 但這不會使您的程序正確,因為您在這一行中有未定義的行為:

        strcat(s1,s2);

這可以解決以使數組s1足夠大:

        char s1[32]="Avishek",s2[]="Chowdhury"; // make s1 big enough to concatenate later

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM