char *name[]={"tianjin","taiyuan","beijing","shanghai","tianjin","beijing"};显示21 76 D:\C语言\C语言课后作业\实验13.5.cpp [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
时间: 2023-07-03 20:32:19 浏览: 128
这个警告是因为你在定义 `char *name[]` 数组时,使用了字符串常量来初始化数组元素。在 C 语言中,字符串常量是只读的,不能被修改。所以,编译器会发出警告,提示你可能会误用这些字符串常量。
为了避免这个警告,你可以将 `char *name[]` 数组改为 `const char *name[]`,表示其元素是只读的字符串常量。代码如下:
```
const char *name[]={"tianjin","taiyuan","beijing","shanghai","tianjin","beijing"};
```
这样修改后,编译器就不会再发出警告了。
相关问题
/*删除指针数组中重复的字符串*/ #include<stdio.h> #include<string.h> int del_name(char **name,int n)//删除函数 { int i,j,k; for(i=0;i<n;i++) {for(j=j+1;j<n;) if(strcmp(name[i],name[j])==0)//比较两个字符串 {for(k=j;k<n;k++) name[k]=name[k+1];//字符串移位 name[k]=0; n--;//字符串个数-1 } else j++; } return n; } int main() { char *name[]={"tianjin","taiyuan","beijing","shanghai","tianjin","beijing"}; int n=sizeof(name)/sizeof(char*);//计算字符串的个数 printf("Before deleting:\n"); for(int k=0;k<n;k++) puts(name[k]); n=del_name(name,n);//调用删除函数 printf("After deleting:\n"); for(int k=0;k<n;k++) puts(name[k]); return 0; }为什么输出的有重复的beijing
在你的删除函数中,有一个错误,导致重复的字符串无法被正确删除。在第6行的循环语句中,变量j没有初始化,所以在第8行的比较语句中,j的值不确定,可能会比i小,导致重复的字符串没有被比较到。你可以将第6行的for循环语句改成以下形式,来解决这个问题:
```
for(i=0;i<n;i++)
{
for(j=i+1;j<n;)
{
if(strcmp(name[i],name[j])==0)
{
for(k=j;k<n;k++)
name[k]=name[k+1];
name[k]=0;
n--;
}
else
j++;
}
}
```
这样修改后,输出的结果就不会再有重复的字符串了。
name[]={"tianjin","taiyuan","beijing","shanghai","tianjin","beijing"}; n=sizeof(name)/sizeof(char*);//计算字符串的个数 printf("Before deleting:\n"); for(k=0;k<n;k++) puts(name[k]); n=del_name(*name,n);//调用删除函数 printf("After deleting:\n"); for(k=0;k<n;k++) puts(name[k]); return 0; }怎么修改呀?
根据你提供的代码,我们可以看出来,你正在尝试删除字符串数组中的重复元素。但是代码中缺少删除函数的实现,所以你需要添加该函数的实现。下面是一个可能的代码实现:
```c
int del_name(char **name, int n){
int i, j, k;
for(i=0;i<n;i++){
for(j=i+1;j<n;){
if(strcmp(name[i],name[j])==0){
for(k=j;k<n-1;k++)
name[k]=name[k+1];
n--;
}
else
j++;
}
}
return n;
}
```
该函数使用了嵌套的循环来遍历所有字符串,如果发现两个字符串相同,则删除后面的那个字符串。如果你想测试该代码,可以将其放入你的程序中,并且修改 `main` 函数如下:
```c
int main(){
char *name[]={"tianjin","taiyuan","beijing","shanghai","tianjin","beijing"};
int n=sizeof(name)/sizeof(char*);
printf("Before deleting:\n");
for(int k=0;k<n;k++)
puts(name[k]);
n=del_name(name,n);
printf("After deleting:\n");
for(int k=0;k<n;k++)
puts(name[k]);
return 0;
}
```
如果一切正常,你应该能够看到输出的字符串数组中没有重复元素。
阅读全文