C言語演習問題55: IPアドレスの無効化

IPアドレスの無効化

問題の説明: 有効な IPv4 アドレスを指定すると、この IP アドレスの無効なバージョンが返されます。いわゆる無効化された IP アドレスは、実際には各「.」を「[.]」に置き換えることを意味します。

• 例 1: 入力: アドレス = "1.1.1.1" 出力: "1[.]1[.]1[.]1"

• 例 2: 入力: アドレス = "255.100.50.0" 出力: "255[.]100[.]50[.]0"

• ヒント: 指定されたアドレスは有効な IPv4 アドレスです。

アルゴリズムのアイデア:

1. 空の文字列 ans を定義し、空に初期化します。

2. 元の文字列をたどり、「.」が見つかったら、「[」、「.」、「]」を新しい文字列に順番に追加します。

3. それ以外の場合は、トラバースされた文字を文字列 ans に直接追加します。• ここでは、戻り値として新しい文字列の最初の桁を指す別のポインタを定義し、新しい文字列の最後の桁に「\0」を追加する必要があります。そうしないと、次の問題が発生する可能性があります。

1. 範囲外のアクセス: プログラムが NULL 文字で終了していない文字列の内容を読み取ろうとすると、その文字列の後のメモリ領域を読み取る可能性があり、その結果、プログラムが許容範囲を超えてメモリにアクセスする可能性があります。クラッシュやその他のエラーが発生します。

2. エラー出力: プログラムがNULL文字で終了していない文字列を標準出力(画面やファイルなど)に出力しようとすると、その文字列に続いてメモリ領域が出力され、正しく出力されない場合があります。結果。

//IP 地址⽆效化
char* defangIPaddr(char* address) {
	int len = strlen(address);
	char* ptr = NULL;
	//定义指针指向字符串⾸位,并且为新字符串分配内存
	char* ans = ptr = malloc(len + 6 + 1);
	//利⽤指针遍历字符串,当前字符不为'\0'时进⼊循环
	while (*address)
	{
		//判断当前字符是否为'.',是则将"[.]"添加进新字符串
		if (*address = '.') {
			*ptr++ = '[';
			*ptr++ = '.';
			*ptr++ = ']';
		}
		else {
			*ptr++ = *address;
		}
		//将指针指向字符串下⼀位字符
		address++;
	}
	//将字符串最后⼀位赋值为'\0',防⽌访问越界或错误输出
	*ptr = '\0';
	//返回指向字符串⾸位的指针
	return ans;
}

おすすめ

転載: blog.csdn.net/2301_77479435/article/details/132859471