C/C++学習中に遭遇した問題のまとめ(進行時)

1409 ワード


エラーメッセージ: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は文字列定数領域を指し,修正できない.コンパイルフェーズで確定しました.
配列を使用すると、関数変数スタックに動的に作成されます.