Hàm chuỗi chạy sai

Nhờ anh chị coi giúp, e viết hàm thêm dấu “,” vào vị trí k như sau. Chương trình in ra đúng nhưng phía sau còn có thêm một dãy kí tự ascII không mong muốn. Anh chị coi giúp e sai chỗ nào

#include <stdio.h>
#include <string.h>
#define max 30
char* addptu(char *s, int k)
{
	int i;
	for (i = strlen(s) - 1; i >= k; i--)
	{
		s[i + 1] = s[i];
	}
	int x = strlen(s) + 1;
	s[x] = '/0';
	s[k] = ',';
	return s;
}
void main()
{
	char so[max];
	int k;
	gets(so);
	scanf("%d", &k);
	printf("%s", addptu(so,k));
}

Bạn đã ghi đè lên byte cuối cùng thì strlen sau đó sẽ chạy tuốt luôn :smiley:

Vả lại còn phải xét trường hợp chuỗi ngắn.

1 Like

là sao anh? e gán ký tự cuối cùng là NULL để kết thúc chuỗi mà?

Thế mà cũng chạy được á???
Kí tự NULL'\0' chứ không phải '/0'.
Dấu gạch (chia) ngược.

1 Like

:)) e đánh nhầm ấy, còn cái ghi đè lên ý a là mình ghi đè lên ký tự null nên nó chạy hết max(30) ký tự phải ko?
Vậy giải pháp là gán cho chuỗi khác hả?

Trong vòng lặp, bạn đã ghi đè mất kí tự NULL nên khi khi gọi strlen() ở sau thì giá trị này sai.

Chuyển:

lên trước vòng lặp.

1 Like

oh e hiểu rồi, cám ơn anh nhiều

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