gpt4 book ai didi

C: 与 `swprintf` 关联的段错误

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

在调用swprintfchar 转换为wchar 后,调用循环会触发段错误;循环 header 中的语句在循环上下文之外工作正常。 swprintf 命令基于返回值 (3, which is the number of characters written to the output buffer up to the terminating null character) 是成功的,这一事实可以通过删除循环行来确认以防止段错误。然而,之后(或之前)调用的 forwhile 循环会产生段错误。这个问题似乎可以通过将 char* string 更改为 char string[4] 来解决,暗示指针是问题的根源;然而,鉴于我的用例,我宁愿使用 char 指针而不是 char 数组。奇怪的是,如果随着 char* 更改为 char string[4] 而删除循环,则会发生段错误。因此,一些未定义的行为正在发生,可能是因为格式错误的 swprintf 语句;如何正确编写此语句,如果语句格式不正确,为什么它仍然会产生预期的返回值?

#include <stdio.h>
#include <wchar.h>

void main() {

char* string = "ABC";
//char string[4] = "ABC";
wchar_t* string_w;
swprintf(string_w, 4, L"%hs", string);
int retval = swprintf(string_w, 4, L"%hs", string);
printf("string: %ls\nreturn value: %d\n",string_w, retval);

for (int i = 0; i < 2; i++) {
// do nothing
}

}

注意:我正在使用 gcc 进行编译:(Debian 6.2.1-5) 6.2.1 20161124。

最佳答案

这个

  wchar_t* string_w;

还有这个

  swprintf(string_w, 4, L"%hs", string);

如果不使 string_w 指向有效内存,就会出现问题。您需要在使用之前正确初始化 string_w ,例如

  wchar_t* string_w = malloc(SOME_PROPER_SIZE);

关于C: 与 `swprintf` 关联的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42585685/

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