如何避免在函数调用中保留 C 中的字符串值



编辑:解决方案是使用strdup((

我再次问了我的问题。 如何创建一个新字符串以在每次调用函数时用作键?

我想在每次调用我的函数时更新一个新的变量 char[]。原因是因为我在全局哈希图中将密钥设置为较新。我不希望每次调用函数并修改更新时都修改键。

#include <stdio.h>
#include <string.h>
void new(){
char  newer[45];
printf("%sn", newer);
strncat(newer,"hi",1235);
}
int main()
{
int i = 0;
for (i = 0; i < 6; i++){
new();
}
}

我当前的输出是

hi                                                                                                                                            
hihi                                                                                                                                          
hihihi                                                                                                                                        
hihihihi                                                                                                                                      
hihihihihi  

但我希望它是

hi
hi
hi
hi
hi

编辑:我忘了提到我的代码的目的。 我无法完全发布代码,因为它是一个学校项目。基本上,假设我有一个接受(键,值(对的全局哈希图。每次我调用new()时,它都应该向哈希图添加一个新条目。例如,我有一个函数add应该add (key = newer, value = "something")到全局哈希图。我想在 2 次调用函数后hashmap = { key1="hi":value1="stuff",key2="hihi":value2=stuff2"}。 出于某种原因,我的哈希图最终在 1 次调用后{key1="hi:value1="stuff"},然后在 2 次调用后{key1="hihi":value1="stuff",key2="hihi":value2="stuff2"}。原因是因为key1 = newerkey2 = newer如此key1=key2.这意味着每次我在函数调用中修改变量newer时,它都会从字面上更改我以前的键的值

例如,在python中,我可以执行以下操作,因为每次调用newer时,它都是一个新变量,与以前使用newer的调用没有关系。

def new(i,diction):
newer = "hi" * i
diction[newer] = "stuff" + str(i)

diction = {}
for i in range(10):
new(i,diction)
print(diction)

本质上结果是{'': 'stuff0', 'hihi': 'stuff2', 'hihihihihihi': 'stuff6', 'hi': 'stuff1', 'hihihi': 'stuff3', 'hihihihi': 'stuff4', 'hihihihihihihi': 'stuff7 ', 'hihihihihihihihihi': 'stuff9', 'hihihihihihihihi': 'stuff8', 'hihihihihi': 'stuff5'}

我想问如何在 C 中做同样的事情

我想在

每次调用新函数时重置 char[] 的新值。

您所需要的只是正确初始化它:

char newer[45] = "";

作为一般规则,您应该始终在使用局部变量之前对其进行初始化。如果不这样做,通常会导致意外行为,如您在代码中看到的那样。

对程序进行了小修改,如下所示。现在它显示了预期的输出: 1(启动字符数组。 2(将hi附加到数组,大小修改为2 3(打印出来。

#include <stdio.h>
#include <string.h>
void new()
{
char  newer[45]="";
strncat(newer,"hi",2);
printf("%sn", newer);
}
int main()
{
int i = 0;
for (i = 0; i < 6; i++){
new();
}
}

最新更新