字符串和用户在C中输入的字符串有什么区别

威廉

我正在使用一小段代码来测试较大(入门)程序的功能,但我不理解两个字符串之间的区别。

我发现并使用了:

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

int main()
{

char *string, *found;

string = strdup ("1/2/3");
printf("Orig: '%s'\n",string);

while ((found = strsep(&string,"/")) != NULL )
  printf ("%s\n",found);

return (0);
}

并一次打印一个令牌。

然后,当我尝试移动到用户输入的字符串时:

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

int main()
{
  char string[13],
  char *found, *cp = string;

  fprintf(stderr, "\nEnter string: ");
  scanf("%12s",string);
  printf("Original string: '%s'\n",string);

  while((found =  strsep(&cp,"/,-")) != NULL )
    printf("%s\n",found);

  return(0);
}

我遇到段错误。我了解指针,数组和字符串的基础知识,但是很明显我缺少了一些东西,很希望有人告诉我它是什么!

另外-如果更改printf("%s\n",found);为,printf("%i\n",found);我会返回一些垃圾整数,但始终是正确的数量,例如,如果输入,1/2/3我会得到三行整数,1111/2222我会得到两行。

谢谢!

-编辑-有一个附加问题strsep在此处详细说明谢谢大家

dbush

在第一段代码中,string分配了返回值strdup,该返回值分配了用于复制字符串的空间,并返回了指向该分配空间的指针。

在第二段代码中,将string其传递给时未初始化scanf,因此scanf正在读取该指针中的无效值并尝试取消引用。这会调用未定义的行为,在这种情况下将表现为崩溃。

您需要为用户的字符串留出空间。一种简单的方法是创建给定大小的数组:

char string[80];

然后说出scanf它可以读多少个字符:

 scanf("%79s",string);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ruby 中的“字符串”和“字符串”之间有什么区别吗?

Python中的“字符串”和“字符串”之间有什么区别吗?

Golang中*字符串和字符串之间有什么区别?

C++ 中的“ABC”和字符串(“ABC”)有什么区别?

FormUrlEncodedContent和查询字符串有什么区别?

字符串和字节字符串有什么区别?

字符串文字和字符串值之间有什么区别?

Scala:参数的(a:字符串)和(a:=>字符串)有什么区别?

常规字符串和逐字字符串有什么区别?

字符串文字和仅字符串之间有什么区别?

字符串和不带字符串的django foreigin键之间有什么区别?

Matlab中的字符串和字符有什么区别?

Javascript中的字符串和字符数组有什么区别?

R中的字符串和字符有什么区别?

角度指令范围中的字符串键和非字符串键有什么区别?

C 中的字符串和以 Null 结尾的字符数组之间真的有什么区别吗

这两种在C中获取字符串输入的方法有什么区别?

java中的可变和不可变字符串有什么区别

Rust字符串中的“ growable”和“ mutable”有什么区别?

Angular 2中的“字符串”和“文本”有什么区别?

字符串基元和JavaScript中的String对象有什么区别?

Go中的字符串和[] byte有什么区别?

PHP中的单引号和双引号字符串有什么区别?

正则表达式和javascript中的字符串有什么区别?

JavaScript中的空白和空字符串有什么区别

EF Core中的字符串连接和字符串插值之间有什么区别吗?

在C中操作字符串的两种方法有什么区别?

创建字符串对象有什么区别

字符串和文字有什么区别?