如何将循环中获取的char值附加到String中,以将其传递给ShellExecute()? [关闭]

问题描述 投票:-3回答:2

如果变量'S'在for循环中,它存储用户输入的Binary值的char值,如何附加所有字符以形成一个String,我可以传递给ShellExecute()函数。

char *u="https://google.com"; 
ShellExecute(NULL, "open",u, NULL, NULL, SW_SHOWNORMAL); //this will open a webpage

^^^二进制值的输入应使'u'是在浏览器中打开的URL。这将由用户照顾。刚引用它。

以下是转换Binary - > Dec-> Char:

for(i=0; i<21; i++)
scanf("%ld",&n[i]);                        //Binary

for(i=0; i<21;i++)
{
   k=n[i], c=0, decimalNumber=0;
   while(k!=0)
    {
     remainder  = k%10;
     k /=  10;
     decimalNumber +=  remainder*pow(2,c); //Dec
     ++c;
    }
      char S=decimalNumber;                //Char
      .
      .  //how do I join all the Char I am getting here in one String
      .
 }

使用这种方式会导致很多问题,但这是我在阅读大量数据后想到的唯一方法......

char  *u1=NULL;
char  *u=NULL; //just after void main()
.
.
.  //after I store char in 'S'
u1=u; //'u1' stores the string as 'u' gets deallocated every loop
size_t len=strlen(u1);
u=malloc(len +  1  +  1 );
strcat(u,u1); //copies the value of 'u1' from previous iteration to 'u'
u[len]=t;
u[len+1]='\0';

如何将字符存储在String变量中?

任何小帮助都非常感谢,谢谢! :)

c pointers visual-studio-code shellexecute
2个回答
2
投票

您的代码中存在许多可能导致内存损坏的问题。

char  *u1=malloc (sizeof  25);

我认为这应该分配25个字符?它实际上分配sizeof(25)sizeof(int)字符,可能是4.你只需要malloc(25)

char  *u="";

这将创建一个只读空字符串文字,您无法修改其值。

u1=u;

这会抛弃先前分配的字符串并导致内存泄漏。

strcat(u,u1)

你的记忆是未初始化的,你需要在调用之前调用memset(u, 0, len + 2),否则u1将被添加到u中的第一个空字符之后,u可能不包含任何空字符,因此u1可以写入内存中的任何位置。


1
投票

那里你有一个错误,这可能很好地解释了垃圾:

     u=malloc(len +  1  +  1 );
     strcat(u,u1);

malloc线(在第一次迭代),你失去了由u初始化的char *u="";malloc可能会返回一个未经注册的内存区域(带有垃圾),而strcat会在垃圾后复制u1

© www.soinside.com 2019 - 2024. All rights reserved.