gpt4 book ai didi

c - 向字符串添加空终止符

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:31 24 4
gpt4 key购买 nike

我使用 sscanf 扫描字符串并将其添加到结构中。唯一的问题是我无法打印出字符串,因为默认情况下没有添加空终止符。我尝试使用 strcat() 函数在其中添加一个空值,但后来意识到这是行不通的。感谢您的帮助。

struct a
{
int *ref;
char string[50];
}rec;

void task()
{


char *p_test;

char test[50] = "9999:STRING OF TEXT";
p_test = test;

sscanf(p_test, "%d:%[^\n]", &rec.ref, rec.string);

printf("String is:%s", &rec.string);

}

最佳答案

您的代码存在多个问题。

  1. test[50] = "9999:STRING OF TEXT";

这是错误的,原因有二。

A) test 是一个char 数组,而不是一个char* 数组。因此,当您将字符串 (a char*) 分配给元素时,地址会转换为 char

B) 元素 50 在您的数组中不存在,写入它会调用未定义的行为。您有一个包含 50 元素的数组,索引为 0...49

要为数组分配初始值,您需要做的就是:

char test[50] = "9999:STRING OF TEXT";

而且由于test不需要修改...

const char *test = "9999:STRING OF TEXT";
  1. 如果你想清零一个数组,最简单的方法是:

    char test[50] = {0};

当然,如果您一开始就正确分配了字符串,则不需要,这不是您的问题。

  1. a 结构的 string 成员是 char,而不是 char* (一个字符串),并在打印时使用 %s 格式说明符调用未定义的行为。

  2. main 被定义为返回 int,而不是 void

  3. sscanf 需要指向数据的指针来填充。rec.ref 是一个int,你需要传递它的地址,即,&rec.ref

  4. 您需要为rec.string分配存储。


这是一个工作示例:

#include <stdio.h>

#define STRING_LEN 50

struct a
{
int ref;
char string[STRING_LEN];
} rec;

int main()
{
char test[STRING_LEN] = "9999:STRING OF TEXT";

// note that, in the real world, this may
// be a buffer overflow waiting to happen
sscanf(test, "%d:%[^\n]", &rec.ref, rec.string);

printf("String is:%s, rec is:%d", rec.string, rec.ref);
return 0;
}

关于c - 向字符串添加空终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com