プロが教える店舗&オフィスのセキュリティ対策術

配列bの代わりに,必要最低限の領域を確保して、確保した領域cに文字列をコピーする。
また、"Hello World!"とは文字数の異なる文字列に対しても動作するように、 下のコードを書き換えるにはどのようにすればいいのでしょうか?


#include<stdio.h>

int main(void){
char *a="Hello World!";
char b[20];
int i;

printf("Original string:\"%s\"\n", a);

for(i=0;a[i]!='\0';i++){
b[i]=a[i];
}
b[i]='\0';

printf("Copied char array:\"%s\"\n", b);
return 0;
}

教えて!goo グレード

A 回答 (2件)

/* 配列bの代わりに,必要最低限の領域を確保して、確保した領域cに文字列をコピーする。

*/
#include<stdio.h>
#include <stdlib.h>

int main(void){
 char *a="Hello World!";
 char *c=malloc(sizeof(char) * 13);
 int i;

 printf("Original string:\"%s\"\n", a);

 for(i=0;a[i]!='\0';i++){
  c[i]=a[i];
 }
 c[i]='\0';

 printf("Copied char array:\"%s\"\n", c);
 free(c);
 return 0;
}

/* "Hello World!"とは文字数の異なる文字列に対しても動作するように、 下のコードを書き換える */
#include <stdio.h>
#include <stdlib.h>

int main(void) {
 char *a = "Fuck the World!";
 int i;
 int count = 0;

 printf("Original string:\"%s\"\n", a);
 for (i = 0; a[i] != '\0'; i++) {
  count++;
 }
 char *p = malloc(sizeof(char) * (count + 1));
 for (i = 0; a[i] != '\0'; i++) {
  p[i] = a[i];
 }
 p[i] = '\0';

 printf("Copied char array:\"%s\"\n", p);
 return EXIT_SUCCESS;
}
    • good
    • 0

おっと。


下のコードpをfreeするの忘れてた。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

人気Q&Aランキング