C中的分段错误导致代码有时运行,但其他时间未运行

扎赫拉·马哈茂德(Zahra Mahmood)

我正在编写一个简短的程序,给我一个名字的缩写,所以如果名字是john smith,它将给我JS。

我写的代码是:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{ 
    string name = "String Name Goes here"

    for (int i = 0, n = strlen(name); i < n; i++)
    {
        printf("%c", toupper(name[i]));
        while(name[i] != ' ')
        {
            i++;
        } 
    }
    printf("\n");
}

因此,由于我只是使用了通用字符串名称,因此我应该得到的结果是SNGH。问题是,代码有时可以正常工作,而其他时候我遇到了细分错误。当字符串中没有大写字母时,它总是出现,但是当字符串中没有大写字母时,有时它会输出我想要的内容。我知道这与访问不允许的内存有关,但是我看不到在这里如何应用,因为我仅访问i计数器。

发生这种情况的任何原因?

*编辑:之所以使用“字符串”,是因为我正在访问一个我未在此处列出的库,该库定义了获取字符串的函数。这样我就可以使字符串正确了,我只是将代码替换为以前的代码。那不是导致问题的部分。

乔尼

如注释中已提到的,如果您正在处理的字符串未以空格字符结尾,则此循环将跳过字符串终止符,并在name变量之外的内存中寻找空格字符如果它在到达太远之前找到了空格字符,则程序将成功终止。如果找不到空间,则最终会出现“段错误”错误,试图从无效的内存位置读取。

    while(name[i] != ' ')
    {
        i++;
    } 

解决方法是检查空格以外的字符串终止符:

    while(name[i] != ' ' && name[i] != '\0')
    {
        i++;
    }

这是当然的,假设string这里实际上是一个C字符串:char[]char*

例如,您可以通过运行程序来自己找出这一点valgrind您将得到的输出告诉您while第12行-statement使用未初始化的内存:

==9110== Conditional jump or move depends on uninitialised value(s)
==9110==    at 0x4006B1: main (test.c:12)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在等待时运行其他代码

来自分类Dev

代码有时运行良好,有时会给出整数表达式预期错误

来自分类Dev

AngularJS-当所有其他控制器等完成时运行代码

来自分类Dev

MySQL C API:从其他线程运行查询时出现分段错误

来自分类Dev

MySQL C API:从其他线程运行查询时出现分段错误

来自分类Dev

jQuery脚本仅有时运行

来自分类Dev

是否是试图编译此代码的错误导致IDE终止或编译器无法运行?

来自分类Dev

在执行其他命令时运行计时器C ++

来自分类Dev

C ++中运行时的分段错误

来自分类Dev

在 bash 脚本中运行 docker 命令导致分段错误

来自分类Dev

在cron作业中运行时,Python脚本引发错误,但在其他时间没有其他错误

来自分类Dev

C 中的分段错误错误。代码在朋友的计算机上运行,但不是我的

来自分类Dev

502运行其他php文件时运行默认laravel应用程序时网关错误

来自分类Dev

错误导致嵌入式javascript无法运行

来自分类Dev

在运行非常旧的 C 代码时遇到分段错误

来自分类Dev

在Visual Studio 2013中运行单元测试时运行其他项目

来自分类Dev

在需要时运行其他代码,而不是直接传递给节点CLI

来自分类Dev

C ++代码编译没有错误,但是在运行时给出了“分段错误”

来自分类Dev

即时运行代码

来自分类Dev

Shell脚本中的代码在其他操作之前运行

来自分类Dev

如何测试代码是否在其他appdomain中运行

来自分类Dev

C代码中的分段错误

来自分类Dev

C ++代码中的运行时错误

来自分类Dev

代码C ++中的运行时错误

来自分类Dev

rsync检测到文件时运行其他命令

来自分类Dev

选中复选框时运行其他脚本

来自分类Dev

登录时运行程序的其他方式

来自分类Dev

Chef-在其他资源失败时运行资源

来自分类Dev

在执行其他命令时运行计时器

Related 相关文章

  1. 1

    在等待时运行其他代码

  2. 2

    代码有时运行良好,有时会给出整数表达式预期错误

  3. 3

    AngularJS-当所有其他控制器等完成时运行代码

  4. 4

    MySQL C API:从其他线程运行查询时出现分段错误

  5. 5

    MySQL C API:从其他线程运行查询时出现分段错误

  6. 6

    jQuery脚本仅有时运行

  7. 7

    是否是试图编译此代码的错误导致IDE终止或编译器无法运行?

  8. 8

    在执行其他命令时运行计时器C ++

  9. 9

    C ++中运行时的分段错误

  10. 10

    在 bash 脚本中运行 docker 命令导致分段错误

  11. 11

    在cron作业中运行时,Python脚本引发错误,但在其他时间没有其他错误

  12. 12

    C 中的分段错误错误。代码在朋友的计算机上运行,但不是我的

  13. 13

    502运行其他php文件时运行默认laravel应用程序时网关错误

  14. 14

    错误导致嵌入式javascript无法运行

  15. 15

    在运行非常旧的 C 代码时遇到分段错误

  16. 16

    在Visual Studio 2013中运行单元测试时运行其他项目

  17. 17

    在需要时运行其他代码,而不是直接传递给节点CLI

  18. 18

    C ++代码编译没有错误,但是在运行时给出了“分段错误”

  19. 19

    即时运行代码

  20. 20

    Shell脚本中的代码在其他操作之前运行

  21. 21

    如何测试代码是否在其他appdomain中运行

  22. 22

    C代码中的分段错误

  23. 23

    C ++代码中的运行时错误

  24. 24

    代码C ++中的运行时错误

  25. 25

    rsync检测到文件时运行其他命令

  26. 26

    选中复选框时运行其他脚本

  27. 27

    登录时运行程序的其他方式

  28. 28

    Chef-在其他资源失败时运行资源

  29. 29

    在执行其他命令时运行计时器

热门标签

归档