str系関数とmem系関数の違いについて
Posted: 2008年1月28日(月) 01:15
初めまして。
C言語の関数について質問があるのですが、
文字列操作系関数のstr系関数(strcpy、strcmp、strncpy等)と、
mem系関数(memcpy、memcmp等)には、どういった違いがあるのでしょうか?
私が調べて出た結論は、strcpyは、
・書き込み先のサイズを知っていなければならない。
・読み込み元の値は\0で終了している。
・元の長さが先のサイズを超えてはいけない。
等の制約があり、間違えて使うとメモリを破壊する可能性があるので多様すべきではない。
なので、次数制限機能があるstrncpyを使ったほうがいい。
と言う所まで分かり、strncpy≒memcpy と言う結論に出たのですが、
問題を出して来た相手の期待している返答は『str系関数とmem系関数の違い』との事でして、
この解答では駄目だそうです。
ヒントとしては、
char str[8]に8桁の文字列を入れて、その値をコピーしようとすると、
memcpyは問題ないがstrncpyでは正常な動作をしない、との事らしいです。
(口頭でのヒントでメモも取れず、もしかしたら間違っているかも知れませんが・・・)
後は、やはりメモリ関係が答えのヒント、らしいです。
長文な上に説明力が無く、訳がわからない質問かと思われますが、
宜しければどなたかご指導お願いいたします。
C言語の関数について質問があるのですが、
文字列操作系関数のstr系関数(strcpy、strcmp、strncpy等)と、
mem系関数(memcpy、memcmp等)には、どういった違いがあるのでしょうか?
私が調べて出た結論は、strcpyは、
・書き込み先のサイズを知っていなければならない。
・読み込み元の値は\0で終了している。
・元の長さが先のサイズを超えてはいけない。
等の制約があり、間違えて使うとメモリを破壊する可能性があるので多様すべきではない。
なので、次数制限機能があるstrncpyを使ったほうがいい。
と言う所まで分かり、strncpy≒memcpy と言う結論に出たのですが、
問題を出して来た相手の期待している返答は『str系関数とmem系関数の違い』との事でして、
この解答では駄目だそうです。
ヒントとしては、
char str[8]に8桁の文字列を入れて、その値をコピーしようとすると、
memcpyは問題ないがstrncpyでは正常な動作をしない、との事らしいです。
(口頭でのヒントでメモも取れず、もしかしたら間違っているかも知れませんが・・・)
後は、やはりメモリ関係が答えのヒント、らしいです。
長文な上に説明力が無く、訳がわからない質問かと思われますが、
宜しければどなたかご指導お願いいたします。