【问题标题】:strcat_s adds strange charactersstrcat_s 添加奇怪的字符
【发布时间】:2015-01-09 16:43:18
【问题描述】:

我有以下几点:

char confchar[MAX_PATH] = "\\dbstrings.cfg";
char buffer[MAX_PATH];
GetModuleFileNameA( NULL, buffer, MAX_PATH );
path_strip_filename(buffer);

在这里我得到了实际工作应用程序的路径。到目前为止,这是有效的。我会得到的

c:\users\xxx\documents\visual studio 2008\projects\secdb\debug\

我使用 strcat_s 来组合这些:

char c_buffer[MAX_PATH*2] ;
strcat_s(c_buffer, buffer);
strcat_s(c_buffer, confchar);

字符串兼容用于标签:

System::String^ c_bufstr = gcnew String(c_buffer);
this->lbl_stat->Text = lbltxt;

现在我得到类似的东西:

@1vc:\users\xxx\documents\visual studio 2008\projects\secdb\debug\dbstrings.cfg

我还弄乱了那个 MAX_PATH,用整数替换它等等。结果是一样的。那么我该怎么做才能删除路径前面的这个 @1v 呢?

【问题讨论】:

  • 'char buffer[SomeSize] = {}' 获得零初始化

标签: c++ visual-c++ visual-studio-2008


【解决方案1】:
char c_buffer[MAX_PATH*2] ;
strcat_s(c_buffer, buffer); // <-- problem!
strcat_s(c_buffer, confchar);

c_buffer 未初始化,因此您需要在调用strcat_s 之前将其第一个元素设置为0,或者使用strcpy_s 而不是第一次调用strcat_s

【讨论】:

  • ...strcpy_s 在语义上最有意义,但与它所属的操作序列不对称。
【解决方案2】:

谢谢大家,看来问题已经解决了。

[...]
char buffer[MAX_PATH] = {};
[...]
char c_buffer[MAX_PATH*2] ;
strcpy_s(c_buffer, buffer);
strcat_s(c_buffer, confchar);
[...]

标签中显示的字符串现在应该是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2011-12-14
    相关资源
    最近更新 更多