编辑:解决方案是使用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 = newer
和key2 = 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();
}
}