strtok_s函数打破了程序

时间:2016-03-10 11:56:04

标签: c++ string

我已经阅读了有关此功能的大部分已回答的问题,但我想现在为什么我的代码会打印令牌而又会破坏。我应该使用这个函数从只有var app = angular.module('app_name'); var isEmpty = true; app.controller("bankDetailsController", [ "$scope", "$http", "config", "$mdToast", function($scope, $http, config, $mdToast) { $scope.bankDetails = {}; $scope.transactionTypes = { NEFT : "NEFT", IMPS : "IMPS", WALLET : "WALLET", }; $scope.getBankDetails = function() { $http.get(config.webServicesUrl.bankDetails, headerConfig).success(function(data) { if (data.body) { $scope.bankDetails.transactionTypes = $scope.transactionTypes.IMPS; isEmpty = false; } }).error(function(error) { console.log("Error : " + error.error); }); }; }]); 分隔符的字符串中提取标记并对它们进行一些操作,但是我首先尝试打印标记,如果这样可以完美地工作,那么修改令牌。这没有发生...... 我在Visual Studio 2015中编写了由帮助查看器引导的代码:

' '

我在控制台中得到了这个结果,这让我很开心:

enter image description here

但是,我也收到了这个错误,一个名为#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main() { char s[50] = "testing the strtok_s function", *token = NULL, *next_token = NULL; // Establish string and get the first token: token = strtok_s(s, " ", &next_token); cout << token << '\n'; // While there are tokens in s: while (token != NULL) { //Get the next token: if (token != NULL) { token = strtok_s(NULL, " ", &next_token); cout << token << '\n';; } } } 的窗口弹出,一个箭头指向一行,可能解释了原因:iosfwd

这是错误窗口:

enter image description here

2 个答案:

答案 0 :(得分:1)

token返回后,您使用cout作为strtok_s的输入参数,而不测试它是否为空。

这不安全,可能是您崩溃的原因。

请尝试以下方法:

while (token != NULL)
{
    cout << token << '\n';
    token = strtok_s(NULL, " ", &next_token);
}

通过这样做,您可以删除对cout的第一个电话。

答案 1 :(得分:0)

关于代码中的以下两行:

token = strtok_s(NULL, " ", &next_token);
cout << token << '\n';;

strtok_s()返回NULL表示没有更多的标记要从字符串中检索时,你能尝试向your rubber duck解释这里发生了什么吗?