30/09/2018, 16:14

[Thắc mắc] 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

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] == '';
	printf("Chuoi la:%s", s);
	free(s);
	return 0;
}
Tran Huan viết 18:24 ngày 30/09/2018

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

Nguyễn Hữu Điền viết 18:15 ngày 30/09/2018

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.

Tran Huan viết 18:20 ngày 30/09/2018

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

  • Cấp phát bộ nhớ bằng malloc http://www.cplusplus.com/reference/cstdlib/malloc/
Bài liên quan
0