[英]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 而是重新創建它們,並且第一個塊中的s1
, s2
與第二個塊中的s1
, s2
不同。 但這不會使您的程序正確,因為您在這一行中有未定義的行為:
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.