C/C++学習中に遭遇した問題のまとめ(進行時)
1409 ワード
1
エラーメッセージ:incompatible implicit declaration of built-in function‘malloc’
解決方法:include
2エラーメッセージ:strcpyでセグメントエラーが発生しました.
解決方法:strcpyの最初のパラメータは読み取り専用であるため、strcpyの最初のパラメータが読み取り専用であるかどうかを判断します.
例
上記main関数は以下のように変更されます.
セグメントエラーの例外が発生します.
理由はchar*s="abcd 1234";
sは文字列定数領域を指し,修正できない.コンパイルフェーズで確定しました.
配列を使用すると、関数変数スタックに動的に作成されます.
エラーメッセージ:incompatible implicit declaration of built-in function‘malloc’
解決方法:include
2エラーメッセージ:strcpyでセグメントエラーが発生しました.
解決方法:strcpyの最初のパラメータは読み取り専用であるため、strcpyの最初のパラメータが読み取り専用であるかどうかを判断します.
例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void LoopMove(char *source,int steps)
{
char *temp =(char *)malloc(strlen(source)+1);
if(temp != NULL)
{
printf("malloc true
");
}else
{
printf("f");
temp = (char *)malloc(100);
}
strcpy(temp,source);
int len = strlen(source)-steps;
strcpy(source+0,temp+len);
strcpy(source+steps,temp);
*(source+strlen(temp))='\0';
}
int main(void)
{
char s[] ="abcd1234";
LoopMove(s,3);
printf("%s
",s);
return 0;
}
上記main関数は以下のように変更されます.
int main(void)
{
char *s ="abcd1234";
LoopMove(s,3) ;// LoopMove("abcd1234",3);
printf("%s
",s);
return 0;
}
セグメントエラーの例外が発生します.
理由はchar*s="abcd 1234";
sは文字列定数領域を指し,修正できない.コンパイルフェーズで確定しました.
配列を使用すると、関数変数スタックに動的に作成されます.