Delphi 德尔福XE3-Can';t串接字符串

Delphi 德尔福XE3-Can';t串接字符串,delphi,concat,delphi-xe3,Delphi,Concat,Delphi Xe3,就我的一生而言,我无法连接两个(或三个)字符串。以下是我尝试过的一些代码: 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 := '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 \-username-\Downloads\done.txt


我做错了什么?

我猜您的
用户名
变量末尾包含#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,则删除它。

Delphi字符串串联有效。您提供的代码没有给出您所说的输出。提供一个完整的程序来重现行为。谢谢,它的结尾是一个空终止字符。我会接受这个答案,当我可以(2分钟)。。。或者让RTL删除它
Concat('C:\Users\',PChar(Username),…)
@Sertac,我还没有建议如何删除空终止符,但是
PChar
typecasting效果很好。谢谢你的提示!一个更好的选择是首先找出
Username
为什么包含错误的
#0
字符,然后修复该逻辑。