第二次调用同一源时 strncpy() 失败

2024-03-10

我是 c 新手,想将字符串分成两部分。这是我的代码:

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

void test(char** a, char** b)
{
  const char * c = "abcdef";

  *a = (char *)malloc(4* sizeof(char));
  *b = (char *)malloc(4* sizeof(char));


  strncpy(*a, c, 3);

  *a[3] = '\0';

  fprintf(stderr, "a -> %s\n", *a);



  strncpy(*b, c+3, 3);

  *b[3] = '\0';

  fprintf(stderr, "b -> %s\n", *b);

}

int main()
{
setvbuf (stderr, NULL, _IONBF, 0);
char *a = NULL;
char *b  = NULL;

test(&a, &b);

fprintf(stderr, "a -> %s\n", *a);
fprintf(stderr, "b -> %s\n", *b);
}

我希望有abc on a变量和def在变量中b。但我的问题是它失败了Segmentation Fault。运行此命令后,我得到以下输出:

a -> abc
Segmentation fault

我不明白为什么。我在用着cygwin并用命令构建它

gcc test.cpp -o test.exe

抱歉,如果问题听起来很愚蠢。谢谢。


数组下标运算符[]具有比解引用运算符更高的优先级*.

所以你想改变

*a[3] = ...

to be

(*a)[3] = ...

同样适用于b.


将编译器的警告级别设置得足够高后,它应该会警告您这一点。或者至少告诉你他们的东西有些可疑

*a[3] = '\0';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二次调用同一源时 strncpy() 失败 的相关文章

随机推荐

  • PHP 从 SimpleXMLElement 数组获取值

    我有这个 1 gt object SimpleXMLElement 6 1 attributes gt array 14 name gt string 5 MySQL acknowledged gt string 1 1 comments
  • 如何在一个图中制作超过10个子图?

    我正在尝试制作 5x4 的子图网格 通过查看示例 在我看来最好的方法是 import matplotlib pyplot as plt plt figure plt subplot 221 其中子图 22 中的前两个数字表示它是一个 2x2
  • SLF4J + Logback 无法登录 WildFly

    我在 WildFly 8 中运行 Web 应用程序 但由于某种原因它没有记录 我使用 SLF4J 和 LOGBACK 日志文件是在部署时创建的 但它是空的 我也没有在 Wildfly 日志中看到我的日志语句 该类包含 package com
  • 如何使用 JodaTime 获取特定月份的最后一个日期?

    我需要第一次约会 如org joda time LocalDate 一个月和最后一个月 获得第一个是微不足道的 但获得最后一个似乎需要一些逻辑 因为月份的长度不同 二月的长度甚至多年来都不同 JodaTime 中是否已经内置了这种机制 或者
  • Synchronized 是否像 Lock.lock() 那样驻留并发线程?

    当我们打电话时lock lock 或尝试输入synchronized如果其他线程已经获取了该锁 那么我们的线程就会阻塞 现在我的问题是 当我们查看实施时lock lock 它将获取锁委托给 AQS AQS 实际上会停放当前线程 以便调度程序
  • 如何在 QML 中重用代码

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • 如何将变量从一个脚本传递到另一个脚本

    这是一个我无法正常工作的脚本 它的目的是检查一个复选框是否被选中 然后调用第二个 响应的例程 取决于我最初调用脚本时显示的 selectedindex sindex
  • C# 将字符串转换为 ASCII 字节

    我有一个字符串 LogoDataStr ABC0000 我想转换为 ASCII 字节 结果应该是 LogoDataBy 0 0x41 LogoDataBy 1 0x42 LogoDataBy 2 0x43 LogoDataBy 3 0x30
  • 不推荐使用delayWhen RxJs

    I got a Deprecated symbol used 我的 IDE 中出现使用警告delayWhen在我的应用程序中 My code private nextImg Observable
  • 从文件或标准输入读取

    我正在编写一个实用程序 它接受文件名或从标准输入读取 我想知道检查标准输入是否存在 数据正在通过管道传输到程序 以及如果存在则读取该数据的最强大 最快的方法 如果不存在 则处理将在文件名上进行给予 我尝试使用以下测试来确定大小stdin但我
  • OpenCV 数据矩阵代码查找器

    有人写过或听说过用 OpenCV 编写的数据矩阵代码解码器吗 我用的是自带的解码器ZXing http code google com p zxing 不过说实话 还挺糟糕的 它需要是一个完全清晰的图像 使用整个图像 并且不成一个角度 后者
  • 设置详细的正则表达式

    在尝试设置详细的正则表达式时 set up variables ankerwords beerdigt bestattet begraben beigesetzt combine the words five words before af
  • 是否可以让 Windows Azure 模拟器将浏览器打开到 127.0.0.1 以外的 URL

    简单的问题 但背后有很多意义 讨论 是否可以让 Windows Azure 模拟器将浏览器打开到 127 0 0 1 和端口 81 之外的 URL 按照步骤将 127 0 0 1 更改为所需 IP 计算模拟器设置 转到 Program Fi
  • 如何从 Ruby 字符串中删除特定字符?

    我有几个看起来像这样的字符串 String1 它们的长度都不同 如何在循环中删除所有这些字符串中的括号 使用如下操作String tr http ruby doc org core 2 0 0 String html method i tr
  • Scala:伴生对象与案例类的定义顺序

    在 Scala 2 9 1 中 我得到以下行为 class Foo case class X object X this compiles def bar object Y this compiles case class Y case c
  • python:几何布朗运动模拟[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions GBM 的
  • 在 Snowflake 中逆透视多个列

    I have a table that looks as follows I need to unpivot the Rating and the Comments as follows 在 Snowflake 中执行此操作的最佳方法是什么
  • 嵌套首选项屏幕因 Android 中的屏幕方向更改而关闭

    我最近偶然发现一个问题 我正在使用这样的嵌套 PreferenceScreen
  • 可以在 Tcp 连接中分离某些数据吗?

    我的问题很简单 可以在 TCP 连接中分离某些数据 如标题所示 吗 例如 如果我打电话MySocket Send Encoding UTF8 GetBytes this is a test 我可以从连接的另一端获得 2 个单独的接收操作 例
  • 第二次调用同一源时 strncpy() 失败

    我是 c 新手 想将字符串分成两部分 这是我的代码 include