Xóa khoảng trắng thừa trong chuỗi, có sử dụng con trỏ

Bài mình làm vẫn cho ra kết quả nhưng không hiểu sao có lúc bị cảnh báo như trong hình có lúc lại không bị, các bạn xem xem mình bị sai ở đâu, cảm ơn mọi người :smile:

Code: http://codepad.org/i2RU1ZMe

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Ham xoa ky tu khoang trang
void XoaKyTu(char *s, int i)
{
	int j;
	for (j = i; j < strlen(s); j++)
		s[j] = s[j + 1];
}
int main()
{
	char *s;
	s = (char *)malloc(sizeof(char));
	int i;
	printf("Nhap chuoi:");
	gets(s);
	for (i = 0; i < strlen(s); i++)
	{
		if (s[i] == ' ' && s[i + 1] == ' ')
		{
			XoaKyTu(s, i);
			i--;
		}
	}
	if (s[0] == ' ')
		XoaKyTu(s, 0);
	if (s[strlen(s) - 1] == ' ')
		s[strlen(s) - 1] == '\0';
	printf("Chuoi la:%s", s);
	free(s);
	return 0;
}

for (j = i; j < strlen(s); j++)
s[j] = s[j + 1];
cái này khi chạy tới kí tự cuối cùng của chuổi thì s[j + 1]; sẽ truy xuất ra ngoài vùng nhớ của chuổi

2 Likes

Mình cũng chưa rõ lắm về cấp phát bộ nhớ để làm việc với chuỗi, làm sao để cấp phát bộ nhớ để nhập chuỗi vậy mọi người.

Mèn ơi, vậy phải tìm hiểu cách cấp phát bộ nhớ trước chứ, dùng google để search có rất nhiều bài viết nói về cái này rồi

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