【问题标题】:Delphi XE3 - Can't concatenate stringsDelphi XE3 - 无法连接字符串
【发布时间】:2013-01-21 18:19:45
【问题描述】:

对于我的生活,我无法连接两个(/三个)字符串。这些是我尝试过的一些代码:

dir := 'C:\Users\' + Username + '\Downloads\done.txt'; //"Username" is the computer's current username.
//another example vvv
dir := 'C:\Users\' + Username;
dir := dir + '\Downloads\done.txt';
//last example vvv
dir := Concat('C:\Users\', Username, '\Downloads\done.txt');

所有示例总是返回相同的结果:

C:\Users\-用户名-

从不:

C:\Users\-用户名-\Downloads\done.txt

我在这里做错了什么?

【问题讨论】:

  • Delphi 字符串连接有效。您提供的代码没有给出您所说的输出。展示一个完整的程序来重现行为。

标签: delphi concat delphi-xe3


【解决方案1】:

我的猜测是您的 Username 变量在其末尾包含 #0 并且您将该变量输出到某个 Windows API 函数。例如以下代码将导致这种不当行为:

procedure TForm1.Button1Click(Sender: TObject);
var
  Dir: string;
  Username: string;
begin
  Username := 'Username' + #0;
  Dir := Concat('C:\Users\', Username, '\Downloads\done.txt');
  ShowMessage(Dir);
end;

我的建议是检查您的 Username 变量的值,如果有的话,删除末尾多余的 #0。

【讨论】:

  • 谢谢,它的末尾是一个空终止字符。如果可以(2 分钟),我会接受这个作为答案。
  • .. 或者让 RTL 删除它Concat('C:\Users\', PChar(Username), ...);
  • @Sertac,虽然我没有建议如何删除那个空终止符,但是PChar 类型转换效果很好。感谢您的提示!
  • 更好的选择是找出为什么 Username 首先包含错误的 #0 字符,然后改正该逻辑。