im试图将不同长度的字符串添加到字符串的末尾,并且行为不如我期望的那样。 addToString函数结束后,全局字符串将保持为空
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * string = "";
void addToString(char * string,char* arg){
unsigned int new_string_len = strlen(string) + strlen(arg);
if(strlen(string) == 0){
string = malloc(strlen(arg) + 1);
strncat(string,arg,strlen(arg) + 1);
printf("%lu %s \n",strlen(string),string);
}
else{
string = realloc(string,new_string_len);
strncat(string,arg,new_string_len);
}
}
int main(){
for(int i = 0; i < 3; i++){
addToString(string,"boop");
printf("%s",string);
}
printf("%lu %s \n",strlen(string),string);
return 0;
}
答案 0 :(得分:0)
string
是一个全局变量(更严格地说是一个非静态变量),它允许每个函数(在与之链接的每个文件中)都可以访问它。这意味着每个函数(即addString()
和main()
)在此情况下都是隐式看到的。您无需显式将其作为参数传递。
删除addString
中的第一个参数,它会串联在一起。
即您的新addString
方法是:
char * string = "";
void addToString(char* arg){
// the same code as before, unmodified.
}
int main(){
for(int i = 0; i < 3; i++){
addToString("boop");
printf("%s",string);
}
printf("%lu %s \n",strlen(string),string);
return 0;
}
答案 1 :(得分:0)
您有两种修改string
变量的方法,它们要么传递变量的地址,要么因为它是全局变量,所以不要将其传递给参数。以下代码分别显示了我的意思,
由于全局变量,无需传递
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * string = "";
void addToString(char* arg){
unsigned int new_string_len = strlen(string) + strlen(arg) + 1;
if(strlen(string) == 0){
string = malloc(strlen(arg) + 1);
strncat(string,arg,strlen(arg) + 1);
printf("%lu %s \n",strlen(string),string);
}
else{
string = realloc(string,new_string_len);
strncat(string,arg,new_string_len);
}
}
int main(){
for(int i = 0; i < 3; i++){
addToString("boop");
printf("%s",string);
}
printf("%lu %s \n",strlen(string),string);
free(string);
return 0;
}
传递地址,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//char * string = "";
void addToString(char ** string,char* arg){
unsigned int new_string_len = strlen(string) + strlen(arg) + 1;
if(strlen(*string) == 0){
*string = malloc(strlen(arg) + 1);
strncat(*string,arg,strlen(arg) + 1);
printf("%lu %s \n",strlen(*string),*string);
}
else{
*string = realloc(*string,new_string_len);
strncat(*string,arg,new_string_len);
}
}
int main(){
char * string = "";
for(int i = 0; i < 3; i++){
addToString(&string,"boop");
printf("%s",string);
}
printf("%lu %s \n",strlen(string),string);
free(string);
return 0;
}