如何更改 C 中字符串数组中的单个字符串?
How to Change individual strings in an array of strings in C?
我在下面粘贴了一个示例变量,以便指出我需要更改的内容。如果您看到此数组中有四个字符串,我该如何更改其中一个字符串的字母之一(非手动)。如果有人能解决这个问题,我将不胜感激。
char *names[] = {
"bill",
"man",
"test",
"bob",
};
要在您的示例中将 "bill" 更改为 "ball",我认为可以这样做:
names[0][1] = 'a';
您拥有的是一个指针数组,每个指针都指向一个字符串文字。标准 C 不允许修改字符串字面量,这样做是 undefined behaviour.
根据您的用途和需要,1) 您可以复制字符串并修改它或 2) 将 names
声明为数组的数组(而不是指针)并修改数组元素。
您可能会使用 sizeof() 和指针来完成它,因为内存中的每个字符都是线性的
例如:
`
//Remove duplicate char in string 'in'
char* rem_dup(char* in){
int i=0, j=0, pos=0;
for(;i<strlen(in);i++){
int charat = *(in+i);
for(j=i+1;j<strlen(in);j++){
if(charat == *(in+j)){
*(in+i) = *(in+j) = -1;
}
}
if(*(in+i) > 0){
*(in+pos) = *(in+i);
pos++;
}
}
*(in+pos) = 0;
return in;
}
int main(){
int i=0;
char str[][100] = {"remove duplicates", "", "aabb", "ab", "a", "abba"};
for(;i<sizeof(str)/sizeof(char);i+=sizeof(str[0])/sizeof(char)){
printf("IN :%s\n",(char*)str+i);
printf("OUT:%s\n", rem_dup((char*)str+i));
}
return 0;
}
`
我在下面粘贴了一个示例变量,以便指出我需要更改的内容。如果您看到此数组中有四个字符串,我该如何更改其中一个字符串的字母之一(非手动)。如果有人能解决这个问题,我将不胜感激。
char *names[] = {
"bill",
"man",
"test",
"bob",
};
要在您的示例中将 "bill" 更改为 "ball",我认为可以这样做:
names[0][1] = 'a';
您拥有的是一个指针数组,每个指针都指向一个字符串文字。标准 C 不允许修改字符串字面量,这样做是 undefined behaviour.
根据您的用途和需要,1) 您可以复制字符串并修改它或 2) 将 names
声明为数组的数组(而不是指针)并修改数组元素。
您可能会使用 sizeof() 和指针来完成它,因为内存中的每个字符都是线性的
例如: `
//Remove duplicate char in string 'in'
char* rem_dup(char* in){
int i=0, j=0, pos=0;
for(;i<strlen(in);i++){
int charat = *(in+i);
for(j=i+1;j<strlen(in);j++){
if(charat == *(in+j)){
*(in+i) = *(in+j) = -1;
}
}
if(*(in+i) > 0){
*(in+pos) = *(in+i);
pos++;
}
}
*(in+pos) = 0;
return in;
}
int main(){
int i=0;
char str[][100] = {"remove duplicates", "", "aabb", "ab", "a", "abba"};
for(;i<sizeof(str)/sizeof(char);i+=sizeof(str[0])/sizeof(char)){
printf("IN :%s\n",(char*)str+i);
printf("OUT:%s\n", rem_dup((char*)str+i));
}
return 0;
}
`