调用swprintf
将char
转换为wchar
后,调用循环会触发分段错误;循环头中的语句在循环上下文之外工作正常。 swprintf
命令基于返回值(3,which is the number of characters written to the output buffer up to the terminating null character)成功,这一事实可以通过删除循环的行来确认,以防止分段错误。然而,之后(或之前)调用的for
或while
循环会产生分段错误。将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。
答案 0 :(得分:3)
此
//add textBox to form
myForm.Controls.Add(myTextBox);
//now select the textbox
myTextBox.Select();
//display the form
myForm.ShowDialog();
和这个
wchar_t* string_w;
不使 swprintf(string_w, 4, L"%hs", string);
指向有效内存是一个问题的处方。您需要在使用前正确初始化string_w
,例如
string_w
答案 1 :(得分:3)
您需要分配 userID ObjectID Timestamp seq seqID
======== ========== =====================
1 52 2016-05-01 19:10:01 1 1
1 52 2016-05-01 19:10:05 2 1
1 52 2016-05-01 19:10:07 3 1
1 52 2016-05-01 19:12:01 1 2
1 52 2016-05-01 19:12:04 2 2
2 54 2016-05-01 19:11:09 1 3
2 54 2016-05-01 19:11:19 2 3
======== ========== ===================== == ==
指向的空间;实际上,它是一个指向任何地方的指针。