前提・実現したいこと
C言語でエラーになるコードと同じ挙動をrustでも実現したい
C言語でstrcpyしたときにコピー元とコピー先の領域が重複することで起きるセグフォエラー
rustではコンパイラが検出してくれるはず...ということを確かめたい
C言語で文字列コピーを使った領域の重複
以下のコードはstrの先頭アドレスの場所から一つずらした場所に文字列をコピーすることで
あえて領域を重複させて不具合を出させるコードです。
C
1#include<stdio.h> 2 3void strcpy(char *dst, char *src){ 4 int i = 0; 5 while(src[i] != '\0'){ 6 dst[i] = src[i]; 7 i++; 8 } 9} 10 11int main(void){ 12 char str[] = "Hello!"; 13 //char str2[10]; 14 strcpy(str +1, str); 15 printf("%s\n", str); 16 17 return 0; 18}
上記のコードの結果
segmentation fault (core dumped)
rustでの実現方法
上記のC言語のコードのように、文字列の先頭アドレスから一つずらしたところにコピーして、領域をあえて重複させたい。
以下はとりあえず途中のコード
rust
1fn main() { 2 let s=String::from("Hello"); 3 strcpy(&s); 4} 5 6fn strcpy(s: &String) -> usize{ 7 while i != 8}
- コピー元から一つずらしたところにコピーするやり方がわからない
(clone使う?コピーする関数作ればいい?)
どのようにして上記のC言語のようなコードをrustで実現できるのか教えていただきたいです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。