Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #112354

Re: Splitting strings into arrays with sscanf

From scott@slp53.sl.home (Scott Lurndal)
Subject Re: Splitting strings into arrays with sscanf
Newsgroups comp.lang.c
References <oi14f9$edg$3@dont-email.me> <oi15e9$g8h$1@dont-email.me>
Message-ID <F1V0B.2767$AG1.2130@fx42.iad> (permalink)
Organization UsenetServer - www.usenetserver.com
Date 2017-06-16 18:01 +0000

Show all headers | View raw


Lew Pitcher <lew.pitcher@digitalfreehold.ca> writes:
>DFS wrote:
>
>> How do you use sscanf to split a line into pieces and add each piece to
>> an array?
>> 
>> 
>> #include <stdio.h>
>> #include <string.h>
>> int main (int argc, char *argv[])
>> {
>> char line[50]    = "";
>> char lbls[4]     = "";
>> char data[10][4] = "";
>> 
>> strcpy(line,"Name,Quarter,Product,Sales");
>> sscanf(line, "%s,%s,%s,%s", lbls[0],lbls[1],lbls[2],lbls[3]);
>> printf("%s\n",lbls[2]);
>> 
>> strcpy(line,"Jim,Q1,computer,100");
>> sscanf(line, "%s,%s,%s,%s", data[0][0],data[0][1],data[0][2],data[0][3]);
>> 
>> return 0;
>> }
>> 
>> 
>> tcc throws an error that doesn't make sense:
>> Line 7: error: ',' expected (got ";")
>
>Line 7 looks to be...
>  char data[10][4] = "";
>which describes an array of 10 elements, each containing an array of 4 
>characters. However, your initialization only consists of a single array of 
>1 character (a \0).
>
>Apparently, tcc is expecting an initialization that looks something like
>  char data[10][4] = {"","","","","","","","","",""};

 As "" is of type 'char *', the values assigned to the array will likely
not be as expected (i.e. either the high-byte (big-endian systems) or the
low-byte (little-endian systems) of the address to the empty string will
be stored in data, rather than the expected single NUL byte at column 0
of each of the ten rows).

 Technically, the correct initializer looks more like:

  char data[10][4] = {
    { 0, 1, 2, 3 },   /* row 0 */
    { 4, 5, 6, 7 },   /* row 1 */
     ...
    { 36, 37, 38, 39 }, /* row 9 */
  };

or
  char data[10][4] = {
    { 'a', 'b', 'c', 'd', },  /* row 0 */
    ...
    { 'A', 'B', 'C', 'D', },  /* row 9 */
  };  

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Splitting strings into arrays with sscanf DFS <nospam@dfs.com> - 2017-06-16 13:33 -0400
  Re: Splitting strings into arrays with sscanf scott@slp53.sl.home (Scott Lurndal) - 2017-06-16 17:46 +0000
    Re: Splitting strings into arrays with sscanf DFS <nospam@dfs.com> - 2017-06-16 14:02 -0400
      Re: Splitting strings into arrays with sscanf scott@slp53.sl.home (Scott Lurndal) - 2017-06-16 18:15 +0000
        Re: Splitting strings into arrays with sscanf Keith Thompson <kst-u@mib.org> - 2017-06-16 12:28 -0700
    Re: Splitting strings into arrays with sscanf Keith Thompson <kst-u@mib.org> - 2017-06-16 12:20 -0700
  Re: Splitting strings into arrays with sscanf Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2017-06-16 13:47 -0400
    Re: Splitting strings into arrays with sscanf scott@slp53.sl.home (Scott Lurndal) - 2017-06-16 18:01 +0000
      Re: Splitting strings into arrays with sscanf Barry Schwarz <schwarzb@dqel.com> - 2017-06-16 12:03 -0700
        Re: Splitting strings into arrays with sscanf "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-16 15:33 -0400
          Re: Splitting strings into arrays with sscanf Keith Thompson <kst-u@mib.org> - 2017-06-16 13:16 -0700
      Re: Splitting strings into arrays with sscanf Keith Thompson <kst-u@mib.org> - 2017-06-16 12:31 -0700
      Re: Splitting strings into arrays with sscanf "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-16 15:45 -0400
  Re: Splitting strings into arrays with sscanf "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-16 14:07 -0400
  Re: Splitting strings into arrays with sscanf "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-16 14:22 -0400
    Re: Splitting strings into arrays with sscanf DFS <nospam@dfs.com> - 2017-06-16 15:36 -0400
      Re: Splitting strings into arrays with sscanf "James R. Kuyper" <jameskuyper@verizon.net> - 2017-06-16 17:17 -0400
  Re: Splitting strings into arrays with sscanf Barry Schwarz <schwarzb@dqel.com> - 2017-06-16 12:06 -0700
  Re: Splitting strings into arrays with sscanf Real Troll <Real.Troll@Trolls.com> - 2017-06-16 17:30 -0400
  Re: Splitting strings into arrays with sscanf ike@iceland.freeshell.org - 2017-06-17 16:49 +0000
  Re: Splitting strings into arrays with sscanf Richard Damon <Richard@Damon-Family.org> - 2017-06-17 18:25 -0400

csiph-web