【C语言】用scanf赋值给带指针的字符串

我希望是输入几个单词之后,这几个单词成为一个字符串,但是变异之后仍然有问题。

#include<stdio.h> 
#include<stdlib.h>
#include<string.h>

int main(int argc, char *argv[])

{  
int n;
printf("Number of words: ");
scanf("%d", &n);
const char *words[n];
int i;
for (i = 0; i < n; i ++)
{
    printf("Enter word: ");
    scanf("%s", words[i]);
}

我是在OS X里面用的gcc,问题如下:
guessword.c:16:15: warning: format specifies type 'char *' but the argument has
type 'const char *' [-Wformat]
scanf("%s", words[i]);
~~ ^~~~~~~~
%s
1 warning generated.

1个回答

const 修饰的不能修改

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
scanf能赋值字符数组,不能赋值给指针的问题
一直有这个疑问,并且经常纠结,今天终于搞明白了。 char *name1; char name2[20] ;  // char *name不能用scanf,没开辟空间指针只能接受地址默认为8个字节          NSLog(@"%lu,%lu",sizeof(name1),sizeof(name2)); // 打印结果为8,20,字符数组真正开辟了20个空间,指
在函数中利用scanf为结构体数组赋值
结构体数组指针作为函数参数,通过数组的首地址与偏移量对结构体数组进行scanf的赋值,在函数中通过指针间接访问到其指向的内存 程序当中,编写函数,输入5个学号(int),5个姓名(字符串),5个成绩数组(每组三个成绩)(int[3]),依次调用函数,最后打印 #include #include struct student  //建立结构体,学号,姓名,3门课的分数
[C]c语言中,scanf里面要是数组要不要加&?
先上一段代码给大家看下#include<stdio.h> int main(){ int a[100]; int n,i; scanf("%d",&n);//输入个数 for(i=0;i<n;i++)scanf("%d",&a[i]);//这里也可以用 scanf("%d",a+i); for(i=n-1;i>0;i--)printf("%d ",a[i]); printf("%d\n",a[i])
C语言---关于scanf读入字符串的一些问题
scanf是C语言中常用的标准输入输出函数,它的常规用法是scanf(“输入格式”,输入地址),scanf从输入缓冲区取入数据按照指定的“输入格式”存储到指定的“输入地址”。 但是有一类问题通常令人头疼,那就是字符串的读入,此处仅仅讨论使用scanf读取字符串的一些问题。 理论上你只需要定义一个字符指针,然后scanf每次读入字符存储到该指针所指的存储空间,之后指针值自动加1. 所以,我们就有了下面
指针及scanf函数的运用
1.什么是指针函数? 答:int *p(int i);是返回值为指针类型的函数。 什么是函数指针? 答:int(*p)(int i);是指向一个返回值为int型的指针。 2.用变量a给出下面的定义 a) 一个整型数         int a; b) 一个指向整型数的指针 int *a; c) 一个指向指针的的指针,它指向的指针是指向一个整型数 int **a; d) 一
字符串常量可以复制给字符指针
1,字符串常量可以赋值给字符指针,即用字符指针指向一个字符串。 因为在C语言中,字符串使按字符数组处理的,将字符串常量复制给字符指针,也就是将字符数组的首地址赋值给字符指针。 , 2,另外:函数参数传递,有数值传递、引用传递及指针传递三种;数值传递不能实现传递,引用和指针可以实现传递。 3,当指针指向数组后,指向数组的指针可以当做数组名使用; int a[5];     for (i
C/C++中,为什么字符串可以赋值给字符指针变量,单引号和双引号的区别
本文是通过几篇转帖的文章整理而成的: http://www.slyar.com/blog/c-quotation-marks.html http://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html 1、含义不同。 用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中
double类型的变量通过scanf函数赋值时需注意的问题
希望对初学者有所帮助
C语言字符指针赋值的问题
#include &amp;lt;stdio.h&amp;gt;  void Initialize (char * a, char * b) {  a[0] = 'T'; a[1] = 'h'; a[2] = 'i';  a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's';  a[7] = ' '; a[8] = 'A'; a[9] = '\0';  b = a;  b[...
用scanf()函数输入带空格的字符串
要输入带空格的字符串,要用到一个格式字符:%[] --> 一个字符集。     “%[]”的作用是扫描字符集合:     例如:scanf(“%[^\n]”,str);     ‘\n’就是一个具体的字符常量,表示:将’\n’作为字符串的结束符号。这与默认状况下,空格可以作为结束符一样,加上”%[^\n]”之后表示由编程者自己定义一个结束符。     了解了上述知识,标题上的问题也就迎刃而
c语言与指针——(二)指针变量的定义与赋值
由上一节,我们知道了,指针就是地址,而变量的指针就是变量的地址,存放变量地址的变量就是指针变量。指针变量可以指向另一个变量,在程序中使用" * "来表示这种指向关系。 1.指针变量的定义         指针的定义依然遵循先定义后使用的原则,在使用前必须先定义,指定其类型编译器再据此为其分配内存单元。         定义指针变量的一般格式:         类型标识符 * 指针变量名
c语言中,scanf里面要是数组要不要加&?
其实你明白原理就觉得很简单了。  首先,你要知道scanf传入的必须是指针,也就是地址。 比如int  a, 就要写成&a。 但是如果是数组,数组符号表示的就是数组的首地址(更准确的说,数组本身表示的是数组首元素的地址)。 int a[10];a就表示a[0]的地址;那a[3]的地址呢? 可以这样,&a[3]; 这就是加&的数组,如果不加呢
使用scanf输入结构体
在《啊哈!算法》中遇到的题,第一次编写时候范了个错误。 注:我建立的是C++
C语言中用scanf连续输入两个…
原文地址:C语言中用scanf连续输入两个字符类型的问题作者:Hoper昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main(void){   char a[100];   char k;   int i,loc;   printf("请输入字符串:");   scanf("%s",a);   printf("n请输入要插入的字符:");   
C语言字符串和字符串数组的输入赋值
决心使用C语言来做算法题,开头很痛苦。主要是困在了C字符串的输入和赋值。 现总结一下: **1、字符串指针一定要开辟空间后在做输入** char * str;   str=(char *)malloc(100*sizeof(char));   scanf("%s",&str); **2、字符串数组要做初始化的开辟空间后再来存储字符串**   char * strAr
C语言中字符串赋值处理方式
C语言中,字符串可以赋值给字符指针变量,或者将字符串用字符数组保存。因为c语言没有直接对字符串提供语法糖方面的支持。而且C标准库很多方法处理字符串是以空字符结尾为前提的,这个必须要记住。char *p,a='5'; p=&a; //显然是正确的, p="abcd"; //但为什么也可以这样赋值??答: 双引号做了3件事: 1.申请
c语言实现函数给主函数中的指针赋值的方法
//利用二维指针。自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法 */ #include void f (int **p); int main (){ int * a ; a = NULL ; f (&a); printf("%d",*a); free(a); } void f (int **a){
C语言学习笔记:使用键盘输入给字符串赋值的几种方式
在我们定义一个字符串变量的时候如需使用键盘输入数据给字符串赋值一般会用到三种方式,记录一下三种方式的区别。如我们定义一个字符串 char name[10];(10代表字符串的长度)。scanf:char name[10]; scanf(&quot;%s&quot;,name); printf(&quot;输入的name是:[%s]&quot;,name);如果此时输入的字符含有空格 ,在给字符串赋值的时候就会出现 明明空格后面还有字符,...
学会使用malloc,学会对指针赋值
先看一个程序,其实这是我编的一个不算小的程序里面的片断,把曾经遇到的问题写出来:#includeint main(void){char *a;//a=(char *)malloc(20);a=gets(a);//scanf("%s",a);//getchar();puts(a);getchar();return 0;    }这个是我在windows下面调试的一个程序,用的是dev c
C语言关于数组与指针内容小结
数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]; 其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实
C语言中,通过指针给结构体中的变量赋值
typedef struct Mech_Para//»úе¼°Ô˶¯²ÎÊý { int32_t P001_TipBoxX; int32_t P002_TipBoxY; int32_t P003_TipBoxZ; int32_t P004_IntervalX; int32_t P005_IntervalY; int32_t P006_TipBuckleX; ...
C语言-scanf处理多个空格的字符串
C语言-scanf处理多个空格的字符串学号:16340027中山大学数据科学与计算机学院目录C语言-scanf处理多个空格的字符串 中山大学数据科学与计算机学院 Scanf的基本用法 输入带有空格的字符串 处理未知数量的多个数据 总结1. Scanf的基本用法int scanf ( const char * format, ... );首先让我们来了解一下scanf函数的基本用法。scanf是C语言
c语言 如何用指针来处理字符串?
一字符指针 1字符指针输出字符串 2字符指针处理字符串 3字符数组与字符指针处理字符串有何不同 二指针数组读者,你好! 如果你精通C,希望能得到你的斧正;如果你是初学者,希望能对你有所帮助。 加粗的是一些我认为比较重要的内容。一、字符指针1、字符指针输出字符串为了更好的理解这部分内容,我们先看一个例子:#include <stdio.h> int main() { char *ps
C语言指针详解----指针声明定义赋值
C语言的指针是让新手很头疼的事情,但是由于其太过于灵活,以至于可以很好得的解决一些复杂的问题,因此不得不掌握。我最近正在学习指针相关的内容,因此在这里做一个小的总结。本篇是不涉及到函数以及结构体等复杂的使用方法,仅仅讨论一下指针的基本使用方法。 首先我们区分 *  和  &  ,这两个运算符,  & 我们在scanf函数中经常使用。为了方便理解我们看下面这行代码: int *p =a; 定义
指针能用立即数直接赋值吗?
学习的过程中产生了这个疑问:指针变量本身是一个地址,那么能直接用地址的值赋给指针吗? 答案是可以,只要加一个类型强制转换,比如定义了 int * p;  可以接着 p=(int*) 0x04;  此时我又想,那么可以把一个存着地址的变量直接赋给指针吗? 直接赋当然不可以,那么强制类型转换呢,于是有了以下代码: int temp=0x02; char * p; p=(char*)te
c语言中scanf输入带空格的字符串以及scanf输入单个字符的问题
c语言中如果输入带空格的字符串有gets(s) 和scanf("%[^\n]",s)两种方式。如下程序: #include #include int main() { int len=0,i=0,k=0; char s[128];      //scanf("%[^\n]", s); //scanf输入带空格的字符串  gets(s);             //gets(s
c语言中const 类型变量地址赋值给指针。
作者:余天升 链接:https://www.zhihu.com/question/21792567/answer/19354371 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 const在C语言中是表示道义上保证变量的值不会被修改,并不能实际阻止修改,通过指针可以修改常变量的值,但是会出现一些不可知的结果。几种情况不同,我们一个一个来看。 1、直接赋值 cons
scanf怎样才能输入带空格字符串?
我们到知道采用scanf("%s",a);当遇到空格就自动截断了,怎样才能输入带空格的字符串呢?是不是只能用gets()?????明显不是,scanf是可以实现的。目前的scanf支持一种类似于正则表达式样式的输入,关于正则表达式的内容,大家可以自行解决。我们知道在正则表达式中[^\n]表示除了回车以外的所有字符,当然也包括空格啦!!!就用这个。代码如下: #include int main(
如何让scanf接收包含空格的字符串
众所周知,scanf遇到空格或回车即停止接收字符串,今天学到一招,可以让scanf接收包含空格的字符串。 #include using namespace std;   int main() { char a[20]; scanf("%[^\n]",a); puts(a); return 0; } 这里主要介绍一个参数,%[ ],这个参数的意义是读入一个字符集合。[ ]是个
scanf()函数如何输入一个带空格的字符串函数
下面例子摘自《C程序员》
关于scanf与指针
scanf输入的值要赋值给指针指向的对象的值时候不需要再前面+寻址
C语言从控制台输入一个字符串,然后赋值给变量
1、常规代码:char name[10]; printf("Name: "); scanf("%s", name);
scanf输入数组问题
输入学生的信息#include main() { struct { int num; char name[20]; char sex; int age; }stu[5]; int i; for(i=0;i<5;i++) { printf(
结构体中指针赋值问题的分析及C代码示例
本文对结构体中指针赋值问题进行了分析,并用C代码演示了指针的赋值方法。
Scanf输入多个用逗号隔开的字符串
原文http://www.hb6.org/M/a-trap-of-scanf.html Scanf输入多个用逗号隔开的字符串   今中午做《程序设计实习 / Practice on Programming》上week2的习题,遇到了一点小问题。 题目要求输入格式为:名字,年龄,学号,分数1,分数2,分数3,分数4 其中名字和学号为字符串,其余均为非负整数。 我随手敲了: sca
C语言 字符串指针与二维字符串数组
31.字符串指针 char *str = "hello world";    //hello world这个字符串存储在常量区,str只保存了字符串常量的首地址 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字
用C语言给指定的内存地址赋值(通过指针)
这两天找工作,做面试题的时候,碰到这样的题:指定了一个地址,比如说0x0012ff7c这样一个地址,要求是给这个指定的地址赋一个确定的值,比如说100,当时就是一个郁闷啊,在汇编里这样用过,在c中还真没用过。今天在网上查了查,自己也在turbo c上运行了一下,正好做个总结,方法如下: char * test; test = (char *)0x0012ff7c; *test = value
scanf(“%s",)与gets()输入字符串的区别,以及与getchar()吸收回车键的搭配
scanf,gets,getchar的区别 1.scanf输入字符串的时候不会接收Space空格,回车Enter,Tab键,则认为输入结束。 2.gets能接收空格键,回车键,Tab键。 3.getchar只能接受一个字符,可接受回车键。常用来吸收回车符。 输入操作原理   程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,
scanf()函数实现输入带有空格的字符串
我们用scanf()函数输入一个带空格的字符串时,经常会在第一个空格时就停止输入。 下面有两种方法可以完整输入字符串 1)利用strcat()函数来实现带空格字符串的输入,可以用字符串追加函数strcat()来连接每个单词。  Strcat()一般格式:char*strcat(char*dest,const char*src);   函数将字符串src连接到dest的尾端,并返回字符串de
C/C++ 指向字符的指针为什么可以用字符串来初始化,而不是字符地址。
本文是通过几篇转帖的文章整理而成的,内容稍有修改: 一、 C语言中,为什么字符串可以赋值给字符指针变量 char *p; a='5'; p=&a;                     //显然是正确的, p="abcd";              //但为什么也可以这样赋值?? 问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点!  
C语言中给指定的内存地址赋值(通过指针)
应用中的实际问题:通过I2C接口发送到MCU一个地址数据(unsigned char AdData),一个待写入数据(unsigned char DaData)。 希望将DaData的值写到MCU内存地址为AdData的寄存器当中。代码如下:   unsigned char * pReg; // 创建一个指针变量 pReg = (unsigned char *) AdData; // 将
使用scanf初始化指针
无意间想到用scanf初始化指针,觉得挺有意思的,代码如下: #include int main() { int num = 5; printf("%p ", &num); int *p = NULL; scanf("%p", &p); printf("%p\n", p); printf("%d\n", *p);
C语言 浅谈数组和字符指针的赋值问题
在学习C语言的过程中,总是会遇到很多问题,不管它简单与否,了解到其本质问题就迎刃而解。一下我阐述的知识点,我在编程学习中遇到问题,并查阅资料料所总结的一点东西,可能会有不严谨或错误的地方,希望指出改正。 错误一: char str[10]; str = &amp;quot;hello&amp;quot;; 以上代码,是绝对不被允许的,因为数组除了在声明时的初始化可以成块的把数据赋值给数组。其他任何时候都只能是单个的元素对其...
C语言 结构体与结构体指针用法总结
在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。 我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下: struct book { char name[30]; char author[20]; }; struct book a[2] = { { &quot;Nature&quot;,&quot;Lina&quot; },...
C语言const与指针——为什么不能用char **给const char **赋值
C语言中,const限定词指定了一个不可修改的变量,但并不是常量。它可以使编译器帮助我们保证某些变量不被意外修改,例如指针或引用传递时,加上const可保证我们的源数据不被破坏。const修饰指针时情况比一般情况下要复杂许多,先看下面这个例子: 1 const char * p1;//p1指向的内容不可变2 char const * p2;//p2指向的内容不可变3 char * const
C语言中关于字符数组输入,scanf没执行
问题:有时C语言中关于字符数组输入,有的scanf语句没执行。未执行scanf的代码:#include&amp;lt;stdio.h&amp;gt;int main(){ int n; int t=0; scanf(&quot;%d&quot;,&amp;amp;n); char arr[n]; int i; for(i=0;i&amp;lt;n;i++) { scanf(&quot;%c&quot;,&amp;amp;arr[i]); } printf(&quot;%c\n&quot;,ar...
关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
首先,结构体里面的字符串指针输出出现乱码的问题: 相信很多遇到过这种问题的人都跟我一样写过这样的代码(好吧,或许不一样。。。): #include #include typedef struct{ int age; const char* name; const char* id; }person; person p(); int main(){ person s[1]; s[0]=
指针直接赋值与strcpy区别
C/C++ code ? 1 2 3 4 5 char* p1="abcdefg"; char* p2;   p2=p1; strcpy(p2,p1); p2=p1; strcpy(p2,p1); 这两个语句有什么区别?? 解析:
c语言获取用户输入字符串是scanf和gets的区别
解释 gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。 1.scanf() 所在头文件:stdio.h 语法:scanf("格式控制字符串",变量地址列表); 接受字符
c语言中整数赋值和字符赋值的一些问题
int i=289 char c='a'; c=i;这个问题,因为char是一个8位的存贮结构,你把一个16位的int的结构赋值给了它,结果只能是把高位的丢掉,所以i被减了256以后赋值给了c,即低位部分赋值给了c你在c='a'时,c存的是97但你后来把i也就是289给了c,所以值溢出了,(为什么这里i被剪掉的是256呢,这个256是怎么算出来的?) 补充:289是10进制 转换到8进制是000
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问