Lỗi ở chuỗi gán dấu phẩy trong dãy số

đề bài là:Viết chương trình nhập một số nguyên, xuất lại số đó ở dạng chuỗi nhưng có dấu “,” ngăn cách hàng triệu, ngàn…
VD: 123456789 à “123,456,789”
em viết cũng gần được rồi nhưng không hiểu sao lại lòi đầu 2 phần tử cuối kí tự khá lạ, em không hiểu tại sao nó có,nên em sửa chống cháy bằng cách gán nó bằng NULL,ai hiểu được lý do vì sao thì chỉ em với ạ.

#include <iostream>
#include <cstring>
void themdau(char buffer[],int len);
using namespace std;
int main(){
    char buffer[100];
	cin.getline(buffer,80,'\n');
	int len=strlen(buffer);
	themdau(buffer,len);
	return 0;	
}
void themdau(char buffer[],int len){
	int phu=len/3;
	if(len%3==0){
		phu--;
	}
	len+=phu;
	int phu1=0;
	int phu2=phu;
	for(int i=len-1;i>=0;i--){
		if(phu1==3){
			buffer[i]=',';
			phu--;
			if(phu==0){
				break;
			}
			phu1=0;
		}
		else {
		    buffer[i]=buffer[i-phu];
		    phu1++;
		}
	}
	buffer[len+1]='\0';//cai nay em sua chong chay thôi
	buffer[len+2]='\0';// cai nay em sua chong chay thôi
	cout<<buffer;
}

Chống cháy gì chứ, vậy là đúng rồi. Phải gán '\0' vào cuối chuỗi chứ. Đúng hơn phải là:

buffer[len] = '\0'; // chỉ 1 dòng này thôi.

Mấy kí tự lạ đó là “rác” của bộ nhớ đấy.

4 Likes

anh ơi, anh chỉ em tại sao lại có rác vậy ạ,tại em thấy em sài vừa đủ ô nhớ mà anh.

“Rác” do quá trình thực thi tạo ra chứ có phải do bạn tạo đâu.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?