<![CDATA[Latest posts for the topic "Một lỗi trong chương trình đảo ngược các từ trong một chuỗi"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net Một lỗi trong chương trình đảo ngược các từ trong một chuỗi Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strip_newline( char *str, int size )
{
    int i;
    for (  i = 0; i < size; ++i )
    {
        if ( str[i] == '\n' )
        {
            str[i] = '\0';
            return;   
        }
    }
}

int main()
{	
	char input[100];
	char output[100];
	printf("Nhap input string: ");
	fgets(input, 100, stdin);
	// Loai new line o ngay truoc null character khoi input string
	strip_newline(input, strlen(input));
	// review input string
	printf("Review input string: %s", input);
	// Chuan bi san sang cho output string
	*output = '\0';
	// Duyet nguoc input string:
	int index;	
	for(index=strlen(input)-1; index >=0; index--)
	{
		if(*(input+index) == 0x20){
			// Noi doan substring sau blank space vao output string
			strcat(output, input + index + 1);
			// Them ky tu 0x20 vao ngay truoc ky tu NULL cua output string
			*(output + strlen(output)) = 0x20;
			*(output + strlen(output) + 1) = '\0';
			// Thu gon lai input string
			*(input+index) = '\0';
		}
	}
	// Ra khoi vong lap, van con sot mot tu trong do, noi not vao output string
	strcat(output, input);
        // Cho input string chua null char o dau, coi nhu la da chuyen het tu trong input string sang output string
	*input = '\0';

	//Hien thi ket qua
	printf("\n========================");
	printf("\nOutput string: %s", output);
	printf("\n");

	getchar();	
	return 0;
}
Lúc đầu, em nghĩ chương trình đã chạy hoàn chỉnh. Em thử chạy với input string là "Vietnam que huong toi" thì kết quả ra đúng là "toi huong que Vietnam". Nhưng thử với "Hacker vietnam association" thì lại được là: "association vietnam w�ۂ���Hacker". Lần khác chạy cũng với input string đó thì lại được "association vietnam {�ۂ��Hacker". Thế là lỗi ở đâu nhỉ ? sao lúc chạy đúng lúc chạy sai thế nhỉ ? Và thêm một điều nữa. Dòng Code:
*(output + strlen(output) + 1) = '\0';
sao em gán là NULL thay vì '\0' lại bị warning khi biên dịch là: Code:
Restring.c:39:35: warning: assignment makes integer from pointer without a cast
NULL không được ngầm hiểu là ký tự '\0' trong C ?]]>
/hvaonline/posts/list/40008.html#246662 /hvaonline/posts/list/40008.html#246662 GMT