In xâu thấy có xuất hiện kí tự rác

Chào mọi người! Em đang có 1 đoạn code xử lý chuỗi (string), nhưng khi chạy nó gặp 1 lỗi xuất hiện ký tự rác ở string như ở hình ạ

Đây là lỗi:

error

Đây là code của e:

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

// Chuong trinh C voi string //
// *************************//

// Ham xu ly khoang trang ben trai
char *lTrim (char s[]){
	int i=0;
	while (s[i]==' ')
	i++;
	if (i>0)
	strcpy(&s[0],&s[i]);
	return s;
}

// Ham xu ly khoang trang ben phai
char *rTrim (char s[]){
	int i=strlen(s)-1;
	while (s[i]==' ')
	i--;
	s[i+1]='NULL';
	return s;
}

// Ham xu ly khoang trang o giua
char *Trim (char s[]){
	rTrim(lTrim(s));
	char *ptr=strstr(s,"  ");
	while (ptr!=NULL)
	{
		strcpy(ptr,ptr+1);
		ptr=strstr(s,"  ");
	}
	return s;
}

// Ham xu ly ten: VD: _______NghiEm______THanH XuAn__ => Nghiem_Thanh_Xuan
char *nameStr (char s[]){
	Trim(s);
	strlwr(s);
	int L=strlen(s);
	int i;
	for(i=0; i<L; i++)
	if(i==0||(i>0&&s[i-1]==' '))
	s[i]=toupper(s[i]);
	return s;
}

// Ham dem tu trong string
int cout(char *s)
{
	int n=strlen(s),i;
	int cout=0;
	if(s[0]!=' ')
		cout=1;
	for( i=0;i<n-1;i++)
	{
		if(s[i]==' ' && s[i+1]!=' ')
			cout++;
	}
	return cout;
}

int main()
{
	char s[21];
	int result;
	printf("Enter String s1: \n ");
	gets(s);
	printf("\n");
	
	lTrim(s);
	printf("After lTrim \n");
	puts(s);
	printf("\n");
	
	rTrim(s);
	printf("After rTrim \n");
	puts(s);
	printf("\n");
	
	Trim(s);
	printf("After extra blank are remove \n ");
	puts(s);
	printf("\n");
	
	nameStr(s);
	printf("After convert it to a name: \n ");
	puts(s);
	printf("\n");
	
	result=cout(s);
	printf("String have %d words",result);
	printf("\n");
	
	getchar();
	
}

Giúp em ms !!!

Em sửa đc rồi ạ. :stuck_out_tongue:
Tiện cho em hỏi sự khác nhau giữa NULL, \0 và EOF với ạ

1 Like

NULL\0 đều giống nhau (cùng nhĩa là 0). Nhưng NULL thường dùng với con trỏ thì hơn. Còn \0 là ký tự kết thúc chuỗi.

Còn EOF có giá trị là -1. :slight_smile:

4 Likes

Vậy cho em hỏi là ở hàm rTrim của em. Em gán s [s+1] =‘NULL’ khi chạy nó lại lỗi ạ. Trong khi em sửa thành \0 thì chương trình chạy ok

Tất nhiên rồi vì như mình nói :point_down:

Nghĩa là NULL chứa 4 byte nhớ.

Còn

Tức là \0 chứa 1 byte nhớ.

Nếu bạn muốn sử dụng NULL như \0 thì bạn phải ép về kiểu char. Như thế này nè :point_down:

#include <stdio.h>

int main() {
	char s[] = "Viet Nam vo dich";
	s[8] = (char)NULL;
	printf("%s\n", s);  // output: Viet Nam
}

Edit:

Bạn đang hiểu nhầm một chút ở đây. Trong C không có cách viết này: 'NULL', dấu ' chỉ dành cho một ký tự, còn NULL là mỗi chuỗi ký tự, nên phải dùng ".
"NULL" là một hằng chuỗi chứ không phải một ký tự mà nếu xem qua ví dụ của mình ở trên rồi thì chắc bạn cũng hiểu. :smile:

4 Likes

Ok mh cũng hiểu sơ sơ r. Cám ơn b.

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