我无法找出以下代码的不当行为的原因。这是一个接受字符的简单代码,直到输入*或达到数组大小,然后打印从键盘读取的字符。阅读部分看起来很好。此外,如果我在达到数组大小之前输入*,一切正常。但是如果我不输入*并等到读取部分达到数组大小,我就麻烦了。打印时会打印出读取的字符,但之后会打印出一些垃圾。通过调试器,但当索引为3或更多时,循环不会中断。
int main()
{
char myStr [3];
unsigned int index=0;
printf("Enter Single characters. Enter * to stop\n");
do
{
scanf(" %c",&myStr[index]);
index++;
} while ((myStr[index-1]!='*')&&((index)<(sizeof(myStr)/sizeof(myStr[0]))));
index=0;
while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
{
printf("%c",myStr[index]);
index++;
}
printf("\n");
return(0);
}
答案 0 :(得分:2)
代码在<div class="form-group" ng-class="{'has-error':Form.jobtype.$dirty && Form.jobtype.$invalid, 'has-success':Form.jobtype.$valid}">
<label class="control-label" translate="jobdata.joblist.title">
Types of job
</label>
:<br/>
<div ng-repeat="topic in mylist.jobdata.joblist.jobitems">
<div > {{topic.item}}</div>
<ul >
<li ng-repeat="subitem in topic.subitems">
<input type="checkbox" name="jobtype" ng-disabled="shouldDisable(subitem.key)" ng-model="myModel.mychosenjobs[subitem.key]">
{{subitem.values | translate}}
</li>
</ul>
</div>
<div class="form-group" ng-class="{'has-error':Form.myfreetext.$dirty && Form.myfreetext.$invalid, 'has-success':Form.myfreetext.$valid}">
<p>or type it in yourself:</p>
<textarea type="text" class="form-control" name="myfreetext" placeholder="Enter the cooperation type (max of 100 characters)" ng-disabled="shouldDisable('freetext')" ng-model="myModel.mychosenjobs.freetext" ng-minlength="5" ng-maxlength="100"></textarea>
<span class="error text-small block" ng-if="Form.myfreetext.$error.maxlength">Too long!</span>
<span class="error text-small block" ng-if="Form.myfreetext.$error.minlength">Too short!</span>
</div>
</div>
循环的最后一次迭代中遇到未定义的行为
$scope.shouldDisable = function(key) {
if(!$scope.myModel.mychosenjobs[key]) {
var count = 0;
Object.keys($scope.myModel.mychosenjobs).forEach(function(key) {
if($scope.myModel.mychosenjobs[key]) {
++count;
}
});
if(count >= 3) {
return true;
}
}
return false;
};
因为它实际上在做
printf
while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
{
...
访问 while ((myStr[3] ....
越界。
要解决此问题,请执行以下操作:
myStr[3]
Boolean short-circuiting将处理myStr
未执行。
答案 1 :(得分:0)
你正在操纵字符串,女巫需要以空终止。 您应该使用fgets(3)来获取字符串,然后使用strlen(3)来获取长度。 然后你可以移动你的字符串 while(str [i]!='*'&amp;&amp; i&lt; strlen(str)) 祝你好运