fscanf вызывает ошибку сегментации

$ scope имеет другое «это», а затем контроллер «это». Таким образом, если вы ввели контроллер console.log (this) внутри контроллера, он дает вам объект (контроллер), а this.addPane () добавляет метод AddPane к объект контроллера. Но область $ имеет разный объем, и весь метод в своей области должен быть доступен $ scope.methodName (). this.methodName() внутри контроллера означает добавить methos внутри объекта контроллера. $scope.functionName() находится в HTML и внутри

$scope.functionName(){
    this.name="Name";
    //or
    $scope.myname="myname"//are same}

Вставьте этот код в свой редактор и откройте консоль, чтобы увидеть ...

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>this $sope vs controller</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.7/angular.min.js"></script>
    <script>
        var app=angular.module("myApp",[]);
app.controller("ctrlExample",function($scope){
          console.log("ctrl 'this'",this);
          //this(object) of controller different then $scope
          $scope.firstName="Andy";
          $scope.lastName="Bot";
          this.nickName="ABot";
          this.controllerMethod=function(){

            console.log("controllerMethod ",this);
          }
          $scope.show=function(){
              console.log("$scope 'this",this);
              //this of $scope
              $scope.message="Welcome User";
          }

        });
</script>
</head>
<body ng-app="myApp" >
<div ng-controller="ctrlExample">
       Comming From $SCOPE :{{firstName}}
       <br><br>
       Comming from $SCOPE:{{lastName}}
       <br><br>
       Should Come From Controller:{{nickName}}
       <p>
            Blank nickName is because nickName is attached to 
           'this' of controller.
       </p>

       <br><br>
       <button ng-click="controllerMethod()">Controller Method</button>

       <br><br>
       <button ng-click="show()">Show</button>
       <p>{{message}}</p>

   </div>

</body>
</html>
0
задан monolith937 15 January 2019 в 22:43
поделиться

2 ответа

В C, если никакого предыдущего объявления функции не существует, предполагается, что функция возвращает int. Если компилятор предполагает, что функция возвращает int, а возвращает FILE *, а если sizeof(FILE*) < sizeof(int), возвращаемое значение усекается и является недействительным. Таким образом, вы получаете внутренние ошибки glibc, так как указатель, переданный в fscanf, обрезан и недействителен.

Из man fdopen вы можете прочитать:

fdopen(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

Это макросы, которые нужно определить, чтобы в вашей программе было объявление fdopen(). Вы должны определить их до любого включения. Я обычно просто определяю _GNU_SOURCE, который определяет _POSIX_C_SOURCE и т. Д. В features.h.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>

.. rest of the program ...

Для получения дополнительной информации см. будущие тестовые макросы .

При использовании gcc вы также можете сделать gcc -std=gnu11 или другой -std=gnu*. -std=c11 совпадает с -std=gnu11 за исключением того, что макрос _GNU_SOURCE предопределен при компиляции.

0
ответ дан Kamil Cuk 15 January 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: