如果变量'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。这将由用户照顾。刚引用它。
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变量中?
任何小帮助都非常感谢,谢谢! :)
您的代码中存在许多可能导致内存损坏的问题。
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
可以写入内存中的任何位置。
那里你有一个错误,这可能很好地解释了垃圾:
u=malloc(len + 1 + 1 );
strcat(u,u1);
在malloc
线(在第一次迭代),你失去了由u
初始化的char *u="";
。 malloc
可能会返回一个未经注册的内存区域(带有垃圾),而strcat
会在垃圾后复制u1
。