我有爬文找關於這個函數的用法,但我找不到為什麼會這樣!
我輸入b之後,會把上一個a的值給蓋掉,只留下第一個字元!
請問是我哪個部分寫錯嗎? 還是有什麼概念我沒有了解到?
以下是我的程式碼:
#include<iostream>
using namespace std;
char a[]={},b[]={};
int main()
{
cout << "Enter a: ";
cin.sync();
cin.getline(a,100,'\n');
cout << "a: ";
for(int i = 0 ; i < 100 ; i++){
if (a[i]=='\0')
break;
cout << a[i] ;
}
cout << endl;
cout << "Enter b: ";
cin.sync();
cin.getline(b,100);
cout << "b: ";
for(int i = 0 ; i < 100 ; i++){
if (b[i]=='\0')
break;
cout << b[i] ;
}
cout << endl;
cout << "a: ";
for(int i = 0 ; i < 100 ; i++){
if (a[i]=='\0')
break;
cout << a[i] ;
}
cout << endl;
return 0;
}
感謝協助!!
原因可能是在宣告方式a[]={}, b[]={}
由上圖可看出此兩者的位址只差一個 byte(剛好是一個字元)
而a[100], b[100]
的宣告方式
就會有完全「分開」的記憶體位址/空間
#include<iostream>
using namespace std;
char aa[]={}, bb[]={};
char a[100], b[100];
int main()
{
cout << (void *)aa << endl;
cout << (void *)bb << endl;
cout << (void *)a << endl;
cout << (void *)b << endl;
cout << "Enter a: ";
cin.sync();
cin.getline(a,100,'\n');
cout << "a: ";
for(int i = 0 ; i < 100 ; i++){
if (a[i]=='\0')
break;
cout << a[i] ;
}
cout << endl;
cout << "Enter b: ";
cin.sync();
cin.getline(b,100);
cout << "b: ";
for(int i = 0 ; i < 100 ; i++){
if (b[i]=='\0')
break;
cout << b[i] ;
}
cout << endl;
cout << "a: ";
for(int i = 0 ; i < 100 ; i++){
if (a[i]=='\0')
break;
cout << a[i] ;
}
cout << endl;
return 0;
}
另外請教一下
你都解得出動態規劃的題目了
為什麼還會有 getline 的問題呢?
這兩個題目的難度
差距很大哩...
char a[]={},b[]={};
改成
char a[100],b[100];
看看